自家製 Cookie 以外は食べちゃダメ!

こんにちは、ゲスト参加の中山です。
まもなく Chrome や Firefox にて 3rd-party Cookie の扱いが変更される見込みです。

  • SameSite 属性(draft-west-first-party-cookies-07)への対応により Cookie にクロスサイト利用か否か(= 3rd-party Cookie 利用か否か)の明示を要求
  • 明示的な SameSite 属性なしで Set-Cookie された値は 3rd-party Cookie として利用できなくなる
  • これにより Cookie の目的の透明性 + ユーザーへのコントロール提供 + CSRF への対策を実現

仕様には HTTP Cookie Header 送信時の振る舞いについて定義されてますが

3.2. Semantics of the "SameSite" Attribute (Non-Normative)

The "SameSite" attribute limits the scope of the cookie such that it will only be attached to requests if those requests are "same-site", as defined by the algorithm in Section 2.1. For example, requests for "https://example.com/sekrit-image" will attach same-site cookies if and only if initiated from a context whose "site for cookies" is "example.com".

If the "SameSite" attribute's value is "Strict", or if the value is invalid, the cookie will only be sent along with "same-site" requests. If the value is "Lax", the cookie will be sent with "same-site" requests, and with "cross-site" top-level navigations, as described in Section 4.1.1.

今回は仕様に明示されていない HTTP Set-Cookie Header 受信時の振る舞い、具体的には SameSite 属性の上書きについて実験してみたいと思います。

上書き確認

初回の Cookie 書き込みの方法 + 二回目の Cookie 書き込みの方法、の組み合わせから、最終的な SameSite 判定を確認してみます(本調査は Yahoo! の FE エンジニアの安川潤一さんにご協力頂きました。安川さんありがとうございます)。
なお、動作確認には Chrome canary 77.0.3831.0 を用いました。

この結果から Chrome では「属性なしの HTTP Set-Cookie(from 3rd-party)」を除き、常に Cookie の上書きが可能であるということがわかりました。

実装仕様の疑問点

ところで Chrome の実装仕様は、表中の着色した部分に疑問点があります。

具体的には …

  • 赤 = 1st-party からの 3rd-party 制限を 3rd-party から緩和できてよいのか?
  • 橙 = 3rd-party 制限を 3rd-party から緩和できてよいのか?
  • 黄 = HTTP Set-Cookie に関する 3rd-party 制限 / 緩和を JavaScript で変更できて良いのか?
    ※ HttpOnly 属性にも同じことが言えます

赤については「1st-party 専用」と宣言(= 3rd-party 制限)していた SameSite 属性を、制限されているはずの 3rd-party から緩和できるのは微妙な気が …
SynergyMarketing の 松本さん 曰く 1st-party から Lax 指定で Set-Cookie した値を 3rd-party から読めるわけではないので(トラッキングは出来ないので)良いのではないか、と。
なるほど、そういう見かたもありますね。

ちなみに属性ではなく値については、以前の調査 Cookie が上書きされる !? の通り書き込み方法毎に管理されているようでした。
このあたりはブラウザ毎に実装が異なる領域ですので、他ブラウザについて確認された方がいれば是非結果を教えてください。

まとめ(というか雑感)

さて Chromium Blog では以下のように述べられてます。

while heuristic-based approaches where the browser guesses at a cookie's purpose make the web unpredictable for developers.

ITP 的なアプローチや 訪問済みサイトか否か で 3rd-party Cookie の有効 / 無効を切り替える方法はサービス開発者を混乱させるため

we will be updating Chrome to provide users with more transparency about how sites are using cookies, as well as simpler controls for cross-site cookies.

透明性とユーザーへのコントロールを(SameSite 属性によって)提供します、と。
トラッキング業者は既存の Cookie に SameSite=None を付与することで、トラッキングのカバレッジを維持することが出来ますが、今後「ユーザーへのコントロール」がどのような形で提供されるかについてはウオッチしておくことをお勧めします。

ある日突然 SameSite=None な Cookie に対するデフォルト動作が変更されるかもしれません …

Comments are closed, but you can leave a trackback: Trackback URL.