この記事では,情報処理安全確保支援士試験で頻出テーマであるCookieのセキュア設定についてまとめてみました.試験勉強教材の一助としてご活用いただければ幸いです.
HTTPヘッダのセキュア設定については,前回の記事で紹介しておりますので,併せてご覧いただけると幸いです.
Cookieとは
まずは,Cookieについて簡単におさらいしましょう.
Cookieは,ブラウザ(クライアント側)に保存されるテキスト情報の一種であり,セッション管理(ログイン状態の維持),ネットショッピングにおける買い物カゴ機能,広告配信など 様々な場面で利用されている非常に便利な仕組みです.
一方,Cookieを用いたセッション管理にはクロスサイトスクリプティング(XSS)やセッションハイジャックといったリスクが伴います.このため,開発時には関連する属性を適切に設定するなど,セキュリティ対策が不可欠です.
Cookieのセキュア設定
それでは,実際に開発者目線でCookieのセキュア設定を見ていきましょう.以下に代表的なCookieのセキュリティ設定を4つ示します.
Expires
Cookieの失効日時(有効期限)を設定する項目です.
有効期限を短く設定した場合,セキュリティは向上しますが,頻繁にログインを求められるなど,ユーザの利便性を損なう可能性があります.反対に,有効期限を長く設定した場合,ユーザの利便性は向上しますが,セキュリティのリスクも高くなってしまいます.
このように,セキュリティと利便性のトレードオフの関係を意識しながら,適切な長さで有効期限を設定する必要があります.
HttpOnly
HttpOnly属性を付加することで,Cookieの値をJavaScript経由で直接的に読み出すことができなくなります.これにより,「XSS(クロスサイトスクリプティング)攻撃を仕掛け,Cookieで保存されているセッションIDを窃取し,第三者になりすまして不正ログインする」という攻撃を防ぐことができます.
True or FalseのBoolean型で指定します.
Secure(頻出)
Secure属性を付加することで,Cookieは「HTTPS通信時のみ送出」されるようになります.通信が暗号化されていないHTTP通信でCookieを送出してしまった場合,先ほどのように第三者にCookieの値が渡ってしまい,不正にログインされてしまう恐れがあります.
よほど特別な事情が無い限りは,Secure属性を有効にしておくことが推奨されます.
HttpOnly属性と同様に,True or FalseのBoolean型で指定します.
実際に出題された過去問を見てみましょう.
cookieにSecure属性を設定しなかったときと比較した,設定したときの動作として,適切なものはどれか。
ア cookieに設定された有効期間を過ぎると,cookieが無効化される。
イ JavaScriptによるcookieの読出しが禁止される。
ウ URL内のスキームがhttpsのときだけ,Webブラウザからcookieが送出される。
エ WebブラウザがアクセスするURL内のパスとcookieに設定されたパスのプレフィックスが一致するときだけ,Webブラウザからcookieが送出される。
令和3年度 秋期 情報処理安全確保支援士試験 午前Ⅱ 問10
ウが正解です.
ちなみに,アはExpires属性の説明,イはHttpOnly属性の説明,エはPath属性の説明でした.
SameSite
SameSite属性は,異なるオリジン(サイト)にまたがるCookieの設定です.SameSite属性を適切に設定することで,CSRF(クロスサイトリクエストフォージェリ)攻撃に対し,一定の効果があります.SameSite属性の設定について,情報処理安全確保支援士試験の過去問に良問がありましたので,実際の過去問(簡潔のため,改題しています)と共にご紹介したいと思います.
以下の表中の空欄 a ~ d に適する記号を 〇 または × のいずれかで答えよ.ただし,〇はサイトXのCookieが送られることを示し,×はサイトXのCookieが送られないことを示すものとする.

出典:令和6年度 春期 情報処理安全確保支援士試験 午後 問3(改)
【正解】
空欄a:×
空欄b:×
空欄c:〇
空欄d:×
実際にCookieを見てみる
ブラウザのデベロッパー(開発者)ツールを使って,格納されているCookieの値と属性設定を見ることができます.せっかくなので,Cookieの値を確認する方法もご紹介したいと思います.
1)F12キー(または右クリック→開発者ツール をクリック)を押し,デベロッパーツールを立ち上げます.
2)「アプリケーション」タブをクリックします.
タブが表示されていない場合は,タブ横にあるプラスボタンを押すと出現します.
3)デベロッパーツールの左側にあるサイドメニューからストレージ → Cookie → URLをクリックします.
4)格納されているCookieの一覧が表示されます.


