はじめに
はじめまして、こんにちは、サイオステクノロジー新卒エンジニアのあさりです。ここ数年、Webページを閲覧しているとCookieの取得と同意を求めるポップアップを見かけることが多くなった気がします。学生時代は、Cookieについて何も知らず、無視しても普通に閲覧できていたので大抵無視していました。入社してからCookieについて学ぶ機会があったのでまとめたいと思います。
Cookieとは?
Cookie(クッキー)は、HTTPにおいてWebアプリケーションとWebブラウザの間でユーザーが入力したデータや履歴などの情報を記録するための仕組みです。記録することによって、ユーザーが再度同じ情報を入力する手間を省くことができます。たとえば、IDとパスワードを入力してログインしたWebサイトに、しばらくしてからもう一度アクセスすると、IDとパスワードの入力を求められないことありますよね?これは、CookieでIDとパスワードを保持することによって実現しています。
Cookie誕生の経緯
Cookieは、HTTPが状態をもたないプロトロル(ステートレス・プロトコル)であるために誕生した技術です。状態を保持するステートフルが通信のたびにこれまでのやりとりを覚えているのに対して、ステートレスはリクエストのたびに状態がリセットされ、これまでのやりとりは考慮しません。そのため、ステートレスでは、認証(ログイン)が必要なページに関してはページ遷移のたびに認証が必要となり、非常に不便な気がします。ステートフルのほうが便利じゃないか、と思う方もいると思います。しかし、ステートフルではこれまでのやりとりを覚えているため、本来の処理を行うために余計な処理が発生してしまい、サーバの負担が大きくなってしまうという欠点があります。そのため、Webサーバはステートレスであるほうが適しているのです。ステートフル・レスの話については、こちらの記事でもわかりやすく解説されているので参考にしてみてください。
このような背景があり、ステートレスでも状態を管理できる仕組みが必要になりました。それがCookieです。CookieはNetscape NavigatorというWebブラウザを開発していたNetscape Communications社によって独自に開発された技術でした。その高い有用性が認められ、Microsoft社のInternet Explorerなどほかのブラウザにも採用され、その後2000年にRFC2965で標準化されました。
※RFC(Request for Comments)は、インターネット技術の標準化を行うIETF(Internet Engineering Task Force)が発行している技術仕様などの情報共有をするための文書群です。
Cookieの仕組み
それでは、冒頭のIDとパスワードを入力してログインするWebサイトを例にその仕組みについて説明します。ここでは、ID=taro, パスワード=passとします。まず、ログインする際にはフォームに入力されたID・パスワードの値がリクエストとしてWebサーバに送られます(図中①)。そして、アプリケーション側では、ID・パスワードが正しい場合、HttpResponseとして返却するHeaderを記載してる部分でSet-Cookieヘッダに「ID=taro」、「パスワード=pass」と設定します。この「名前=値」の形式で表されるものをCookieと呼びます。そして、WebサーバからCookieを受け取ったWebブラウザは、CookieをクライアントPC上に保管します。
そして、次回同じドメインにリクエストを送る際(図中②)に、このCookieをHttpRequestのHeaderに入れて送ります。Webアプリケーション側ではこのHeader内のCookieを調べることで、ログイン処理を行います。また、CookieはそのCookieを送ってきたサーバ以外のサーバに対してはCookieを送らないという仕組み(図中③)があり、この仕組みによって意図せずに他のサーバに情報が送られないようにしています。
Cookieの同意が求められる背景
冒頭でここ数年、Cookieの取得と同意を求めるポップアップを目にすることが多くなった気がすると言いましたが、これはCookieのもつリスクに起因しています。Cookieが保存する情報は先ほどお話したID・パスワードに限らず、様々なものが含まれます。オンラインショッピングサイトでは、住所やクレジットカード番号など重要な個人情報が保存される可能性があります。もし、これらの情報がCookieに保存されているデバイス(スマホ・PC)を紛失してしまった際には不正利用されたり、不正アクセスされるリスクがあります。
また、Cookieの情報を利用したプライバシー侵害が問題になっています。就職情報サイトを運営する企業が就職活動中の学生のサイト閲覧履歴などを基にデータ化し、その情報を採用企業に提供していたという問題がありました。知らないうちにサイトから個人情報が抜き取られ、利用されていた点が問題となりました。
Cookieには、このようなリスクがあり、2018年にはEUが個人情報保護ルール「GDPR(EU一般データ保護規則)」を施工し、そのなかでCookieなど個人情報を収集する事業者には、ユーザーにその意図を伝えることが義務付けられました。日本でも2020年に改正個人情報保護法が成立・公布されました。この影響により、日本企業のWebサイトにおいてもCookie取得時の同意を求める機会が多くなっているようです。
まとめ
今回はCookieに関するお話でした。Cookieにより、情報の再入力の手間がなくなり利便性が向上する反面、様々なリスクも存在します。特に住所などの重要な個人情報やクレジットカード番号などの金銭が関わる情報をCookieで扱うサイトについては、Cookie取得に関して慎重になる必要があるのかもしれませんね。