「クッキー(Cookie)」を安全なWebアプリケーションを作る観点で学び直す

こんにちは、穂苅と申します。
前回は、「JALが被害に遭った、不正ログインによるマイル不正利用」の問題について取り上げてきました。
ユーザーにも大きな影響がでた問題でしたので、興味のある方はぜひご覧ください。
今回は、クッキーについてです。Webの世界ではよく使われるクッキーですが、皆さんどのくらいご存知でしょうか。

目次

そもそもクッキー(Cookie)とは?

クッキーは、利用しているWebサイト・サービスからPCやスマートフォンのブラウザに保存される小さなテキストファイルの情報のことです。ここには多くの情報が詰まっていて、サイトの訪問回数、日時、購入履歴、IDやパスワード、住所やメールアドレスなども記録されます。
このクッキーが役に立つところとして、例えばログインをするようなWebサービスへのログインが簡単になることです。また、自分の好みに合った情報を出してくれるなどの情報最適化にもクッキーは一役買っています。

この情報の扱い方についてはとても注意が必要で、現在ではファーストパーティクッキー、セカンドパーティクッキー、サードパーティクッキーと3つのクッキーの種類が存在します。ファーストパーティクッキーとは、閲覧しているWebサイトのドメインが発行する自社のクッキーですので一番分かりやすいもので、該当のサイトドメインの中で機能するものです。セカンドパーティクッキーは、他社が保有するドメインが発行している他社のファーストパーティクッキーです。個人情報ですので、自社としてどのように扱うのかは明確に注意しないといけません。最後にサードパーティクッキーですが、これは第3者が発行するクッキーのことで、例えば広告配信の際に、閲覧したサイトに即した内容の広告が出る様になっているのが代表的なものです。
世界中でプライベートな情報を保護する動きとなってきており、日本も例外ではないためサードパーティクッキーについてはクッキー規制が進んでいくことになります。
そんなクッキーですが、Webアプリケーションを作る際にはクッキーの習性とクッキーの属性を理解しておくことが重要です。

安全なWebアプリケーションのための、クッキー(Cookie)の知識

クッキーを利用したログインなど認証の流れをもう少し細かくすると、サーバ側で認証状態を覚えておく際に、セッション管理を行います。このセッション管理をHTTPで実現する目的でクッキーの仕組みが導入されました。クッキーは、サーバ側からブラウザに対して、「名前 = 変数」の組を覚えておくように指示するものとなります。これをレスポンスヘッダー「Set-Cookie:」で行います。

一度クッキーの値を覚えたブラウザは、その後同じサイトにリクエストを送る際には、覚えたクッキー値(例:PHPSESSID=・・・)を送信するという形です。実際に、Webアプリケーションを作る際には、アプリケーションデータを保持する目的でクッキーそのものに値を入れることは稀です。というのも、クッキーが保持できる値には制限があることと、利用者本人から参照・変更ができるため機密情報の格納に向いていないからです。ですので、クッキーには「整番号」としてのセッションIDを格納しておき、実際の値はサーバ側で安全に管理するという動きが望ましいと言えます。

クッキーの扱いを含めたWebセキュリティ知識を詳しく知りたい場合は、徳丸本と徳丸試験がおすすめ

今回はクッキーの触りの部分を取り上げましたが、まだクッキーの属性やどういうケースで利用するのか、という内容も大事ですので別の回で取り上げたいと思います。
Webセキュリティに関する問題は、今後も多様化し増えていくことが予想されます。セキュリティの問題はサイトやサービス運営側も利用側も必要な知識です。
こういったWebセキュリティ関連の知識について、詳しくなりたい場合は、徳丸本を学ぶことをおすすめします。

徳丸本は、Webセキュリティに関する基本知識が網羅されています。セキュリティは正確に体系立てて理解をしていかないと、システムや会社にとって致命的な問題に繋がります。これらの知識を身に着けたエンジニアとして活躍されていく方にはおすすめです。
そして、学んだあとは理解を確認するために徳丸試験でチェックしてみると理解度が可視化されるため、ぜひチャレンジしてみてください。
【徳丸本】
体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版 脆弱性が生まれる原理と対策の実践
徳丸浩の Web セキュリティ教室
【徳丸試験】
ウェブ・セキュリティ基礎試験 ( 徳丸基礎試験)

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次