Chromeの新しい変化、Schemeful Same-Site
始め
偶然「Schemeful Same-Site」という記事を読んでへえぇと思いました。
1. SameSite
いきなりですが、少しだけCookieの話をしましょう。あるウェブサイト入ると「このウェブサイトではCookieを使用します」とかなんとかのプッシュ通知が来るあのCookieです。
CookieにはSameSite
という属性があり、違うドメイン間のCookie送信の範囲を制限することができます。この属性は以下3つの値をとります。
-
None
:same-site、cross-siteどちらのクエストにも Cookie が付与される -
Lax
:same-siteのリクエストにだけ Cookie が付与されるが、一部例外がある(HTTP get methodなど) -
Strict
:same-siteのリクエストにだけ Cookie が付与される
そして今回紹介するChromeのアップデート事項であるSchemeful same-siteはsame-siteかcross-siteかを判断する基準についてです。
2. Schemeful same-site
Schemeful same-siteは同じドメインでもschemeが違ったらcross-siteに判断するようポリシーを変更した内容です。つまり、同じドメインのhttp
サイトとhttps
サイトを違うサイト(cross-site)になるということです。
もともとはhttp
とhttps
をsame-siteと判断してました。same-siteなのでCookieのSameSite
属性をStrict
もしくはLax
に設定してもサイト間Cookie送信もできました。
しかしSchemeful same-siteが適用されるとhttp
とhttps
をcross-siteと判断します。これはCookieのSameSite
属性をStrict
に設定したらサイト間Cookieを送信できないという意味です。場合によってはLax
設定のときも送信できないでしょう。
この変更の主な目的の一つはCSRFを防ぐためです。
3. CSRF
CSRFはCross-Site Request Forgeryの略で、文字通り違うサイト間のリクエスト偽造する攻撃です。この攻撃を受けるとリクエストが偽造されるので、ハッカーが特定ウェブサイトのセキュリティを弱くしたり勝手に修正・削除などの処理走らせたりすることができてしまいます。
実際韓国では2008年、あるECサイトがCSRF攻撃を受けて1000万人以上のユーザー情報が盗まれた事件がありました。
Schemeful same-siteが適用されるとhttp
サイトのCookieを偽造してhttps
サイトで使用できないので、このような攻撃を無効化できます。
4. 影響範囲
Schemeful same-siteが適用されたら影響される部分があります。ウェブサイトが全部https
なら特に何もしなくて大丈夫でしょうが、そうでなければ以下の場合は対応する必要があります。
以下の例はすべて同じドメインに違うschemeを持つ場合を想定しています(例 http://site.example vs https://site.example)
4-1. Navigation
前述の通りCookie送信が影響されます。今まではhttp
サイトとhttps
サイト同士にCookieを送信できました。変更後はhttp
サイトとhttps
サイトはcross-site扱いになり、Cookie設定をSameSite=Strict
にしたら送信できなくなります。
4-2. サブリソースのロード
サブリソースって何だと思って探したら、web.devのテクブログでこう説明していました。
Examples of subresources include images, iframes, and network requests made with XHR or Fetch.
サブリソースの例としては、images、iframe、XHR または Fetch から発生したネットワークリクエストなどがあります。
今まではhttp
サイトとhttps
サイトの間にサブリソースロードでCookieを送信できました。変更後はhttp
サイトとhttps
サイトはcross-site扱いになり、Cookie設定をSameSite=Strict
またはSameSite=Lax
にしたら送信できなくなります。
4-3. formのPOSTメソッド
form
のPOSTメソッドも同様です。今まではhttp
サイトとhttps
サイトの間にform
のPOSTメソッドでCookieを送信できました。変更後はhttp
サイトとhttps
サイトはcross-site扱いになり、Cookie設定をSameSite=Strict
またはSameSite=Lax
にしたら送信できなくなります。
5. 対応について
5-1. 変更時期
Chrome Platform Statusによると Chrome for desktop は開発中、Chrome for Android は88バージョン(Stabeが2021年1月19日に公開予定)でリリースですね。
In development (tracking bug) in:
Chrome for desktop release In development
Chrome for Android release 88
5-2. サイトのテスト
Schemeful same-siteをテストするためにはChrome86以上のバージョンが必要です。chrome://flagsでSchemeful same-siteをEnabledに設定したらテストできます。
5-3. 対応方法
1番いい方法はサイトを完全にhttps
へアップグレードすることです。web.devのテクブログでもこの方法を勧めています。
we strongly recommend that you upgrade your site entirely to HTTPS to protect your users
もしアップグレードできないならCookieのSameSite
属性をLax
に設定する方法があります。しかし、これは4-1の Navigation の場合だけ対応できてサブリソースのロード、formのPOSTメソッドの場合はhttps
アップグレード以外は厳しいです。
また、Chrome は third-party Cookie を最終的に完全廃止すると発表したので、Cookie属性変更は臨時の処置にすぎません。
終わり
セキュリティとか難しいー!
Discussion