すべての記事

Cookie:Secure、HttpOnly、SameSite属性が重要な理由

日本の個人情報保護法(APPI)は2022年の改正で「個人関連情報」という区分を新設し、cookieに保存された識別子そのものは匿名でも、それを他の情報と照合して特定の個人の行動履歴と紐づけて第三者に提供する場合には本人の同意が必要になった。EUのGDPRのような「まずcookieバナーありき」の設計ではなく、突合・提供という具体的な利用シーンに着目した規制になっている点が特徴的だ。

Secure属性

Secure属性は、暗号化されたHTTPS接続でのみCookieを送信するようブラウザに指示する。これがないと、Cookieは通常のHTTPで平文のまま送信される可能性があり、公共のフリーWi-Fiなど安全でないネットワークでの傍受にさらされる。

HttpOnly属性

HttpOnlyとマークされたCookieは、JavaScript(document.cookie)から読み取ることができない。XSS攻撃によるセッション乗っ取りに対する最も直接的な防御で、攻撃者がページに悪意のあるスクリプトを注入できたとしても、この属性を持つセッションCookieには手が届かない。

SameSite属性

SameSite属性は、クロスサイトナビゲーション時にCookieを送信するかどうかを制限し、CSRF攻撃に対する主要な防御となる。Strictはクロスサイトでの送信を完全に禁止し、今日のすべての主要ブラウザで既定値になっているLaxはリンクをたどる場合など限定的な状況で許可し、Noneはその制限を取り除くが、代わりにSecure属性も必須になる。

なぜ必要なのか

  • 自分のウェブアプリのために安全なセッションCookieを設定する。
  • 個人情報保護法上の第三者提供にあたるCookieがサイトに実際どれだけ埋め込まれているかを洗い出す。
  • 特定の状況でブラウザがCookieを保存または送信しない理由を診断する。

Partitioned属性とサードパーティCookieのない未来

CHIPS(Cookies Having Independent Partitioned State)構想の一環として、Partitioned属性は<iframe>に埋め込まれたサイトが、埋め込み先の親サイトすべてで共有される1つのCookieではなく、親サイトごとに異なるバージョンのCookieを持てるようにする。これはサードパーティCookieの完全なブロックと、従来のクロスサイト追跡モデルとの間の妥協案だ — 決済やチャットのような正当な埋め込み機能は動作し続けるが、異なるサイト間での追跡は許可されない。

ツールを試す