LoginSignup
7
1

More than 3 years have passed since last update.

CookieのSameSite属性がLaxの時の挙動

Last updated at Posted at 2020-10-29

について調べました。

same-site とは

same-siteの説明は下記の記事がとってもわかりやすかった。
https://web.dev/same-site-same-origin/
ブラウザが開いているURLと、リクエストが飛ぶ先の eTLD+1が同じであれば same-site と判定される。

same-siteなリクエストについてはSameSite属性が何であろうとCookieは付与される。
SameSite属性によって挙動が変わるのはcross-siteなリクエストの時。

NoneとStrictの挙動

NoneとStrictは理解しやすい。
None: cross-siteなリクエストについて、どんな場合でもCookieは付与される。
Strict: cross-siteなリクエストについて、どんな場合でもCookieは付与されない。

Laxの挙動

Laxは少し複雑だ。 (なのでこの記事を書きました)
cross-siteなリクエストについてCookieが付与される条件は

  1. top-level navigationであること
  2. methodが GET, HEAD, OPTIONS, TRACE であること
  • top-level navigationは「ブラウザのアドレスバーに表示されているURLの変更が伴う遷移」のこと。

具体的には下記のようになる。

リクエスト生成方法 Cookieがつくか note
a tag 🍪 他サイトからリンクを踏んで遷移する場合
img tag
iframe tag
form tag (method=GET) 🍪 検索系のフォーム等で使われている
form tag (method=POST) form (method=DELETE) というのはHTMLの仕様としてはない。 <input type="hidden" name="_method" value="delete" /> のようなフォームは POST をウェブフレームワークが気を利かせて扱っているだけ。
XMLHttpRequest
Fetch

Cookieがつく ⇒ 🍪
Cookieがつかない ⇒ ❌
多くのリクエストはtop-level navigationではないので❌になる。
form (method=POST) は top-level navigationだがmethodがsafeではないので❌になる。
same-siteの場合は全て🍪になる。

CORSについて

CORSは Same Origin Policyをまたぐためのもので目的が異なる。
CORSの許可がない場合でもPOSTのリクエストは飛ぶのでCSRFは防げない。

7
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1