cookieに限らないけどencodeとdecodeどうするべきか

f:id:ts0818:20220402152458j:plain

visualstudiomagazine.com

Researchers published a scholarly paper looking into security implications of GitHub Copilot, an advanced AI system now being used for code completion in Visual Studio Code and possibly headed for Visual Studio after its current preview period ends.

https://visualstudiomagazine.com/articles/2021/08/26/github-copilot-security.aspx

In multiple scenario testing, some 40 percent of tested projects were found to include security vulnerabilities.

https://visualstudiomagazine.com/articles/2021/08/26/github-copilot-security.aspx

⇧ う~ん...

脆弱性のあるコードが生成され得る割合が40%あまりというのは致命的な気が...

反面教師的に利用するにしても、利用者で脆弱性のあるコードになってしまっているのかどうかを判断せざるを得ないところがなかなかに辛いですかね...

リロードで変数が初期化される問題、cookieで対応する?

Vue.jsのVuexっていう状態を管理するライブラリがあるのだけども、ブラウザのリロードボタンを押したら、Vuexで管理していようが、変数は初期化されてしまうってのに気付いたんだけども、どうしたもんかと。

一応、Vuexの拡張プラグイン的なものなのか、

zenn.dev

qiita.com

⇧ 永続化できる仕組みを提供してくれるものがあるらしいのですが、「cookie」や「local storage」を利用しているってことなんですかね。

ちなみに、「cookie」は、

HTTP cookie(エイチティーティーピークッキー、単にクッキー (cookie)とも表記される)は、マジッククッキーの一種であり、RFC 6265などで定義されたHTTPにおけるウェブサーバウェブブラウザ間で状態を管理する通信プロトコル、またそこで用いられるウェブブラウザに保存された情報のことを指す。ユーザ識別やセッション管理を実現する目的などに利用される。

HTTP cookie - Wikipedia

⇧「HTTP cookie」が正式名称ってことなんですかね?

コンピューティングにおいて、マジッククッキー英語magic cookie)、または単にクッキーcookie)とは、通信プログラム間で受け渡されるデータのトークンまたは短いパケットのことであり、通常、受信側プログラムにとってそのデータは意味を持たない。その内容はOpaque英語版(不透明)で、通常、受信者がクッキーデータを送信者に返すか他のプログラムに渡すまで解釈されない。

マジッククッキー - Wikipedia

⇧ って説明なんだけども、「cookie」ってブラウザで確認できちゃうんですよね。

例えば、「Google Chrome」を使っているんであれば、「Chrome DevTools」を開いて「Application」タブの左サイドバーの「Storage」>「Cookies」で確認できますと。

f:id:ts0818:20220402155642p:plain

つまり、値が無変換である場合はもとより、値を変換してる場合であっても変換してる仕組みが分かってしまえば、解釈され得てしまいますと。

そもそもとして、encodeとdecodeって何なの?

で、そんな無防備な状態の「cookie」を何とか解釈されないようにする工夫の1つが、「encode」ってことになるんかな?

エンコードencode)、符号化(ふごうか)とは、アナログ信号やデジタルデータに特定の方法で、後に元の(あるいは類似の)信号またはデータに戻せるような変換を加えることである。

エンコード - Wikipedia

一般的には、エンコードするための機器・回路・プログラムをエンコーダー、デコード(記事内後述を参照)するための機器・回路・プログラムをデコーダと呼んでいる。

エンコード - Wikipedia

⇧「encode」されたものを元に戻すのが「decode」ってことらしい、表裏一体ってことなのかしらね。

ちなみに、

www.geeksforgeeks.org

blog.shiftasia.com

⇧ 上記サイト様にあるように、「Encryption(暗号化)」「Encoding(符号化)」「Hashing(ハッシュ化)」が異なるものってのは分かったんだけども、相互の関係性が絶妙にモヤモヤしている...

ベン図みたいなものがあれば良いんだけどもネット上で見つけられなかったので、推測になってしまうのだけど、「できること多い」で分類すると、

 Encryption(暗号化)\supseteq \ Encoding(符号化)\supset \ Hashing(ハッシュ化)

みたいな感じになるんかね?

encodeと言っても、どのencodeの話?

「encode」の定義が、

後に元の(あるいは類似の)信号またはデータに戻せるような変換を加えることである。

ってあるように、幅広過ぎて、一体どの「encode」の話を言っているのか迷子になりがちよね...

Google検索で「encode defined」とかでググってみたところ、

⇧ 検索トップに上記が表示されたんですが、

Google’s English dictionary is provided by Oxford Languages.

Oxford Languages is the world’s leading dictionary publisher, with over 150 years of experience creating and delivering authoritative dictionaries globally in more than 50 languages.

https://languages.oup.com/google-dictionary-en/

Googleさんは、英語の辞書として「Oxford Languages」って辞書を使っているそうな。

「Oxford Languages」の定義によると、

encode
convert into a coded form.
"using this technique makes it possible to encode and transmit recorded video information"
  • COMPUTING
    convert (information or an instruction) into a particular form. "the amount of time required to encode a wav file to mp3 format"
  • BIOCHEMISTRY
    (of a gene) be responsible for producing (a substance or behaviour). "this is the gene that encodes the yeast mating type protein"

とあって、大まかに、「COMPUTING」と「BIOCHEMISTRY」の2点が分類の事例としてあげられてますと。

「encode」って言うと、世間一般的には「動画」についての処理って認識されちゃってる模様...少なくとも「Oxford Languages」の辞書によると。

で、独断と偏見を元に、Web系のエンジニアが携わる「encode」と言うと、

  • URL
  • URL以外
    • 文字列
    • オブジェクト
    • etc...

って分類になるんかな?

と言うのも、

qiita.com

⇧ 上記サイト様によりますと、URLの「encode」に特化した「Base64 URL」という手法があり、URL以外の「encode」には「Base64」という手法が存在してるようなので。

ちなみに、「文字化け」でお馴染みの「文字コード」なんかも

Unicodeユニコード)は、符号化文字集合文字符号化方式などを定めた、文字コードの業界規格。文字集合(文字セット)が単一の大規模文字セットであること(「Uni」という名はそれに由来する)などが特徴である。

Unicode - Wikipedia

⇧「符号化」されてることから、「encode」の対象の1つってことになるんかね?

encodeが微妙に統一されてない件、おそらくdecodeも

で、何やら、

qiita.com

⇧ encodeがプログラミング言語によって挙動が変わってるらしいですと。

しかもライブラリがこれまた様々あるわけで、「encode」をサーバーサイドで「decode」をフロントエンドでやってたり、その逆パターンも然り、所謂、「encode」と「decode」を別々のプログラミング言語で行っていたりすると、嚙み合わないことがありますと。

cookieに限らないけどencodeとdecodeどうするべきか

で、そもそもとして、

The scheme used for transformation is not kept secret like in the case of encryption. It is generally publically available and thus, the encoded information can be easily decoded. The aim of encoding is the protection of integrity of data while moving over a communication network.

http://www.differencebetween.info/difference-between-encryption-encoding-and-hashing

Encoding is reversible process, which means we can decode the encoded data to get the original value if we know which algorithm is used for encoding, thus it is not for security purpose and there is no "key" needed for encoding process.

https://blog.shiftasia.com/differences-between-encode-encrypt-hash/

⇧「encode」「decode」は「セキュリティ」は考慮せず、通信ネットワーク上における「データの整合性」が担保されることが目的らしいですと。

逆に言うと、「セキュリティ」に影響しそうな情報については、「encode」「decode」で扱うのはNGってことになるんですかね。

ただ、「Encryption(暗号化)」や「Hashing(ハッシュ化)」で何かしら「encode」を利用しているような場合は、「セキュリティ」を考慮してることになるかと。

なので、「フロントエンド」と「サーバーサイド」で「encode」「decode」の対象とするデータやどんな変換方式を使うか、「セキュリティ」考慮する必要あるのかなどは認識を合わせる必要があるんですかね?

encode decode
Base64 Base64
Base64 URL Base64 URL
Hex Hex

いまのところ、変換方式としては3つしか知らないけども...

毎度モヤモヤ感が半端ない...

今回はこのへんで。