-
Notifications
You must be signed in to change notification settings - Fork 0
MS_SameSiteAttribute
-
TOP > インフラストラクチャ > HTTPヘッダ > Cookie
- SameSite属性の件
- CORS (Cross-Origin Resource Sharing)
- セキュリティ強化のHTTPヘッダ
SameSite 属性とは、
-
- CSRF 対策(
MS_CSRFCountermeasures.md)のために実装された。 - 3rd Party Cookie のクロスサイトでの扱いを変更する属性。
- Chrome では、
SameSite=Laxに設定される。
- CSRF 対策(
-
下記に影響が出るなど、
- クロスサイトで POST 遷移した場合、Cookie が付与されない。
- IFRAME を使用した場合、Cookie が付与されない。
認証界隈でも話題になっている。
これによる影響は、単純に、
- SameSite 属性の値次第で、
- クロスサイトの遷移の中で Cookie が送信されなくなる。
と言う事である。
「クロスサイトの遷移の中で Cookie が送信されなくなる」ので、
クロスサイトの遷移後、
- 遷移先で未ログイン状態になる(Cookie 認証チケット。認証基盤を参照)。
- 遷移先で情報が取得できず、機能が動作しなくなる(Session Cookie)。
※ 例えば、EC サイトのカート情報などが保持できなくなる。
などの問題が発生し得る。
以下の機能が動作しなくなる可能性がある。
いずれも「IdP が RP へ POST でリダイレクトして結果を返す」方式であり、
クロスサイトの POST 遷移そのものであるため、
SameSite=Lax の既定値では RP 側のセッション Cookie が送られなくなる。
以下のバージョンで、SameSite 属性が導入されている。
- Chrome:version 51
- Firefox:version 60
- Edge:Windows 10 ビルド 17672 以降
-
Chrome 78-79
SameSite 属性値が Lax の場合、
「2 分間は Cookie を送信する」と言う(よけい混乱する)独自動作を行う
(Lax + POST の一時的な緩和措置)。 -
Chrome 80
-
SameSite 属性の既定値が None から Lax に変更された。
特に、SameSite 属性が未指定の場合、
SameSite 属性の既定値が None から Lax に変更される。 -
Secure属性を付けずSameSite=Noneを指定した場合、
Set-Cookie自体が無効になったので、HTTP の場合は、
HTTPS 化して、Secure属性を付与する必要がある。 -
新型コロナ対応
- 2020/04/03(現地時間)、この仕様を一時的に撤回すると発表した。
- 一方「Edge」などでは、この仕様変更が維持されている。
-
補足(最新化): 2020 年 4 月の撤回は一時的なもので、 同年 7 月に段階的な再展開が行われ、 現在は Chrome / Edge / Firefox のいずれも
SameSite=Laxが既定である。 従って本ページの記述は「移行期の経緯」として読むべきで、 現行環境では既定 Lax を前提に設計する必要がある。なお、Chrome 91 以降は「Lax + POST の 2 分間緩和」も廃止されている。
- Firefox … 既定 Lax 化
- Edge 80(2020/02/10)より試験運用
- クロスサイトの画面遷移の方法を変更するか、
- 必要な部位に、
SameSite=Noneを明示する
(加えて、HTTPS 化してSecure属性を付与する)。
補足:
SameSite=None; Secureを付ける対象は、 「クロスサイトの遷移/埋め込みで送る必要がある Cookie だけ」に限る。 全 Cookie に一律付与すると、SameSiteによる CSRF 緩和効果を失う。ASP.NET Core では以下のように設定する。
builder.Services.Configure<CookiePolicyOptions>(options => { options.MinimumSameSitePolicy = SameSiteMode.Unspecified; }); builder.Services.AddAuthentication() .AddCookie(o => { o.Cookie.SameSite = SameSiteMode.None; o.Cookie.SecurePolicy = CookieSecurePolicy.Always; });なお、古いブラウザには
SameSite=Noneを未知の値としてStrict扱いする 実装(iOS 12 の Safari 等)があり、 User-Agent により属性を出し分けるワークアラウンドが必要だった時期もある。
- Cookie(3rd Party Cookie 問題)
- CORS (Cross-Origin Resource Sharing)
- SameSite cookie の使用 - Microsoft Learn
- SameSite - MDN
- 新しい Cookie 設定 SameSite=None; Secure の準備を始めましょう - Google Developers Japan
Tags: プログラミング, 通信技術, .NET開発, .NET Core, ASP.NET, ASP.NET Web API
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。