-
Notifications
You must be signed in to change notification settings - Fork 0
MS_Cookie
3rd Party Cookie 問題で話題の Cookie の項を切り出してみた。
Set-Cookie ヘッダでサーバから送信されて保存している HTTP Cookie を、
リクエスト時にサーバへ送り返すヘッダ。
サーバからユーザーエージェントにクッキーを送信する。
| 属性 | 意味 |
|---|---|
Expires=<date> |
クッキーの有効期限 |
Max-Age=<number> |
クッキーの期限までの秒数 |
Domain=<domain-value> |
クッキーの送信先をこれらのホストに指定 |
Path=<path-value> |
クッキーの送信先をこれらの URL パスに指定 |
Secure |
HTTPS 使用時のみサーバに送信 |
HttpOnly |
JavaScript からアクセスできず、XSS 攻撃を軽減 |
SameSite |
クロスサイトのリクエストで Cookie の「送る/送らない」を制御 |
クロスサイトのリクエストで Cookie の「送る/送らない」を制御する。
-
SameSite=None
クロスサイトでも Cookie を送る(従来の挙動)。 -
SameSite=Lax
Top Level Navigation(= アドレスバーの URL 変更が伴う遷移)
以外の(≒ POST、SRC 属性、XHR、FRAME での)
クロスサイトのリクエスト(≒ 攻撃に使われそうなリクエスト)
で一切 Cookie を送らなくなる。 -
SameSite=Strict
全てのクロスサイトのリクエストで一切 Cookie を送らなくなる。
移行メモ(正誤・最新化): 元 Wiki では 「
SameSite=None… ブラウザの既定値」と記載されていたが、 これは 2020 年以前の挙動である。現在(Chrome 80 以降、Firefox、Edge 等)の既定値は
SameSite=Laxであり、SameSite=Noneを指定する場合はSecure属性が必須である (SameSite=None単独の Cookie はブラウザに拒否される)。Set-Cookie: sid=xxxx; SameSite=None; Secure; HttpOnly; Path=/なお
Laxの場合でも、Top Level Navigation の GET では Cookie が送られる (POST では送られない)点がStrictとの違いである。
補足: Cookie 名にプレフィックスを付けることで、 ブラウザ側に属性を強制させられる。
プレフィックス 強制される条件 __Secure-Secure属性があり、HTTPS から設定されたこと__Host-上記に加え、 Path=/かつDomain属性がないこと
__Host-はサブドメインからの Cookie 上書き(session fixation の一種)を防げる。
「3rd Party Cookie」とは、閲覧中のサイト(1st Party)とは別のドメインが
発行する Cookie で、広告やトラッキングに利用されてきた。
プライバシー保護の観点から、各ブラウザが制限を進めている。
- Chrome は、SameSite 属性
- Safari は、Intelligent Tracking Prevention(ITP)(
MS_IntelligentTrackingPrevention.md)
補足(最新化): Safari(ITP)と Firefox(Total Cookie Protection)は 3rd Party Cookie を既定でブロック済みである。 Chrome は当初 2022 年に廃止予定としていたが延期を重ね、 2024 年に「一律廃止はせず、ユーザーが選択する方式」へ方針転換した。
いずれにせよ、3rd Party Cookie に依存した ID フェデレーション(OP のセッション確認、フロントチャネル ログアウト) は 影響を受けるため、 バックチャネル ログアウトや FedCM API 等への移行が進んでいる。 詳細はクレームベース認証も参照。
- SameSite属性の件
- セキュリティ強化のHTTPヘッダ
- CORS (Cross-Origin Resource Sharing)
- Set-Cookie - MDN
- RFC 6265bis - Cookies: HTTP State Management Mechanism
Tags: IT国際標準, 通信技術
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。