SameSiteCookieと呼ばれたりするこの要素は何なのかまとめる
SameSiteとはなにか
SameSiteとは直訳すると「同じサイト」ということだが、その同じサイトであるということの概念は以下のページにまとめられている。
「same-site」と「same-origin」を理解する
上記の内容からSameSiteは「eTLD+1が同じサイト」となる。なおeTLDという言葉の意味に関してはこちらを参照のこと
対する概念としてのCrossSite
SameSiteが同じサイトを示す言葉だが、この言葉の反対の「異なるサイト」ということを表すための言葉が CrossSite
となる。
Cookieが送られる条件
セットされたどのアクセスのときに送られるかは、Set-Cookie
をしたときの属性が影響する。影響する属性は以下の3つ。
- Domain属性
- Path属性
- SameSite属性
Domain属性
Domain属性は未指定の状態だと「Cookieを設定したホストと同じホスト」になる。
逆に値を指定すると指定したドメインを含むドメインに送信されるようになり、未指定時より条件をゆるくすることができる。
詳しくは以下の記事などを参照。
Path属性
Path属性は、設定した値のパスにのみCookieを送るための設定。
この属性が安全性に寄与するかなどの話題は今回の本筋ではないので省略するが以下の記事を参照していただきたい。
SameSite属性
SameSiteは前段で説明したとおり、SameSite以外のリクエスト対してCookieを送るかどうかを判断する。
SameSite属性に設定できる値のパターン
設定できる値は3つある。
- None
- Lax
- Strict
Strict
一番強い設定で、SameSiteに該当するサイトのみCookieを送信する設定。そのためクロスサイトになるドメインには送信されない。
そのためaタグで遷移する場合もGETリクエストになるため、遷移先のドメインが異なる場合に初手はCookieが送信されない。
Lax
MDNの説明を抜粋すると以下の通り
画像やフレームを読み込むリクエストのようなクロスサイトリクエストではクッキーを送信しませんが、ユーザーが外部サイトから元のサイトに移動するとき(例えば、リンクをたどるとき)には送信されることを意味します。 - Set-Cookie - HTTP | MDN
上記の通りStrictを緩和させたもので、ページを遷移する場合のみCookieを送信する。
もともとクロスサイトスクリプティング防止の目的が強い仕様のため悪意のあるサイトからのPOSTリクエストの際にブラウザのCookieが乗らないLaxの設定であればやりたいことは満たせることになる。
この設定はメジャーブラウザ規定の設定。
None
SameSite実装前と同じ挙動になり、どのような場合でもCookieが送られる。
Domain属性とSameSite属性の違い
パッと見すると似たような話に見えるDomainとSameSiteだが2つは異なり分類としては以下のようになる。