No112 クッキーの謎

最近、リクナビの件から、クッキーというコトバがやたらと目に
付きます。そのクッキーの説明をメルマガ「がんばりすぎない
セキュリティ」で以前(2019年6月19日)取りあげました。
なお、この時点ではリクナビの件は知る由もないないため、
「クッキーが個人情報か?」という観点の説明はありません。
悪しからず。

今回は、Webでよく用いられるクッキー(cookie)について解説
します。

クッキーといってもお菓子のことではなく、Webで情報を保管する
方式のことです。

なお、世間ではCookieと表記することが多いようですが、以降では
「クッキー」の表記で統一しています。


1. クッキーとは

クッキーというのは、Webブラウザ(文末参照)で相手を特定する
のに使われる技法で、ログインした利用者を識別するのに必ずと
いって言いほど使われている技法です。

さて、これだけでわからない方が大半でしょうから、ショッピング
サイトにアクセスする場合を例にクッキーの役どころを説明します。


2. ショッピングサイトでカートを識別する方法

ショッピングサイトでは同時にたくさんの人が買いものをします。
たくさんの人がそれぞれ自分用のカートに商品を入れ、自分の
カードなどで支払いをします。

でも、たくさんのカートがあるのに、どのカートが誰のっていう
のをどうやって区別しているのでしょうか?

「そりゃ、最初にログインしてるんだし、カートに名前が付いて
いるんでしょ?」
確かにそうですね。ログインした時なら、IDとかパスワードとか
を入力しますから、どれが誰のか識別できそうです。

ですが、ショッピングカートの中味って、次の日になっても残って
たりしませんか?
そんな時ってログインIDもパスワードも入れ直さないのに「よう
こそ○○さん」なんて表示してくれたりしますよね。
ナニを頼りにして、どれがワタシのカートで、ワタシが誰かとかが
わかるのでしょう?

「そりゃ、PC(文末参照)が気を効かしてIDとパスワードを
送ってるんじゃないの?ほら、パスワード覚えてくれる、パス
ワードマネージャだっけ?あんなのがやってくれてるんじゃない?」
なるほど。
でも、本人が知らないうちにPCがパスワードを勝手に送るのは
マズくないですか?

「え?そりゃそうか。だったらワタシのカートを覚えてられるのは
なぜなの?」


3. クッキーの登場

と、ここまで書けば、わかるでしょうが、これを実現しているのが
クッキーなんです。

クッキーの登場は1994年と随分前のことです。

その頃、ショッピングサイトを実現しようとした技術者がいました。
その人が困っていたのは、人によって違う画面を表示する方法
でした。

当時のWebブラウザは、誰がいつどこからアクセスしても同じもの
しか表示ができませんでした。

製品マニュアルだとか、企業概要のページのように誰もが同じ内容
で良い場合はそれで問題なかったのです。
ですが、人によって違ったページ内容を表示するための仕組みはなく、
かなり難しいことだったのです。

そこで、その技術者が考え出したのが「クッキー」という方式でした。


4. クッキーの技術
---------

クッキーというのは、ごくごく小さなデータです。
どれくらい小さいかというと、多くは100バイト以下です。
(1バイト=英数字1文字と考えてください)

クッキーの内容はサービスを提供する側で、自由に決められます。
例えば、こんな内容がクッキーに入っていることが多いのです。
・誰のカートかを識別する情報(セッション情報と言います)
・表示に使う言語
・前回の訪問日
・表示に使う通貨(円かドルかなど)

例えば、筆者がamazonにアクセスしてみたところ次のように
20種ものクッキーが返されてきました。
いずれも、サーバ側で必要だと思って作っているのですが、
その正確な目的は中の人(この場合はamazonのシステムを作って
いる人)しか知りません。
amznacsleftnav-586a861a-....(長いので略)
amznacsleftnav-a4a24467-....(長いので略)
at-acbjp
csm-hit
ext-pgvwcount
i18n-prefs
lc-acbjp
s_c27
s_cc
s_dvlv_s
s_dslv
s_invisit
s_nr
s_ppv
s_sq
s_vnum
sess-at-acbjp
session-id-time
session-id
session-token
skin
sst-acbjp
ubid-acbjp
x-acbjp
x-wi-uid

これらのクッキーはサーバで作られると、利用者のPC内に保管
されます。
以降、そのサイトにアクセスする時にはブラウザが裏でこの20個の
クッキーを送ることになっています。(送らないようにすることも
できます)

これがサーバにとっての備忘録なのです。
サーバはクッキーを受け取ることで「ああ、この人はさっき○○を
カートに入れた人ね」とか「昨晩スマホからアクセスした人だな」
というふうに、誰の情報かを知り「○○様、ようこそ」と表示したり、
その人用のショッピングカートを表示したりできるわけです


5. クッキーの危険性

クッキーは今となっては、誰もが当然のように利用する技術に
なりましたが、以前(10年以上前)、クッキーは危険だと言われ、
使わない方が良いと言われた時期がありました。

騒がれたのには、いくつかの理由がありました。

一つは、サーバ側でのクッキーの間違った利用が多かったためです。

上記の通り、クッキーにはどんなデータでも保管することができ
ます。そのため、初期のショッピングサイトでは、ログインIDや
パスワードをそのままクッキーに入れる場合がありました。
本人の手間をかけずにログインさせるためとはいえ、IDやパスワード
が本人の知らないうちにダダ洩れというのは大問題です。

また、クッキーは発行元のサーバにしか送られないルールになって
いるのですが、Webブラウザの脆弱性(文末参照)のせいで他のサーバ
に関係ないクッキーを送ってしまうトラブルがありました。

これは悪用されると、他人になりすますことでカード情報などを盗み
取るセッションハイジャック攻撃になります。

各サイト側もこのような攻撃への対策を取りました。
ショッピングサイトで、クレジットカード番号などを変更しようと
すると、再度パスワード入力が要求されるケースがありますよね?
あれはセッションハイジャック攻撃への対策で、改めてパスワード
を入力しないと大切な情報は表示しないための仕組みなんですね。

そのような対策もあり、現在はクッキーを悪用することはかなり
難しくなっており、昔よりはずっと安全性が高くなっています。

とはいえ、時にはWebブラウザでクッキーを全削除して、お掃除する
のは良い習慣です。
念のため書いておきますが、クッキーを全削除すると、各サイトの
サーバに送る情報がなくなるわけですから、全て再ログインから行う
必要がありますので、ご注意を。(一度再ログインすれば、以降は
いつも通り使えるようになります)


6. おまけ:なんで「クッキー」と呼ぶのか

いかにも理由がありそうですが、公式には「Cookieの呼び方に理由
はない」のだそうです。

今回はクッキーの解説をしました。
次回もお楽しみに。


--------
今回登場した用語
--------

○Webブラウザ
 インターネットサイトを見るためのソフトウェア。
 もともとはbrowse(閲覧するという意味の英語)の道具という
 意味だったが、現在はインターネットサイトを見るソフトウェア
 の意味で定着した。
 WindowsならEdgeやIE、MacOSならSafariといったソフトウェアが
 付属している。スマートフォンではAndroidはChromeが、iOSでは
 Safariが付属している。

○PC
 「ピーシー」と読む。
 パーソナルコンピュータのこと。いわゆるパソコン。

○脆弱性
 「ぜいじゃくせい」と読む。
 プログラムが予期していない動作をし、結果として動作しなく
 なったり、本来してはいけない行為ができてしまうこと。
 例えば、権限がないと実行できないはずのコマンドが実行できる、
 見ることを許可されていない情報を見ることができる、など。
 原因は基本的にプログラムを作る時の考慮不足。
 バグ(プログラム不良)の一種だが、特にセキュリティの確保に
 問題がある場合を脆弱性と呼ぶ。
 10年以上前に考案されたプログラムや方式に脆弱性が見つかる
 場合もある。
 理論上、全てを考慮した完全なプログラムを作れば脆弱性は存在
 しないが、現代の技術ではそれは実現できていない。

この記事が気に入ったらサポートをしてみませんか?