Chromeの新しい変化、Schemeful Same-Site

公開:2021/02/07
更新:2021/02/07
4 min読了の目安(約4000字TECH技術記事

始め

偶然「Schemeful Same-Site」という記事を読んでへえぇと思いました。


1. SameSite

いきなりですが、少しだけCookieの話をしましょう。あるウェブサイト入ると「このウェブサイトではCookieを使用します」とかなんとかのプッシュ通知が来るあのCookieです。

CookieにはSameSiteという属性があり、違うドメイン間のCookie送信の範囲を制限することができます。この属性は以下3つの値をとります。

  • Nonesame-sitecross-siteどちらのクエストにも Cookie が付与される
  • Laxsame-siteのリクエストにだけ Cookie が付与されるが、一部例外がある(HTTP get methodなど)
  • Strictsame-siteのリクエストにだけ Cookie が付与される

そして今回紹介するChromeのアップデート事項であるSchemeful same-sitesame-sitecross-siteかを判断する基準についてです。

2. Schemeful same-site

Schemeful same-site同じドメインでもschemeが違ったらcross-siteに判断するようポリシーを変更した内容です。つまり、同じドメインのhttpサイトとhttpsサイトを違うサイト(cross-site)になるということです。

もともとはhttphttpssame-siteと判断してました。same-siteなのでCookieSameSite属性をStrictもしくはLaxに設定してもサイト間Cookie送信もできました。

しかしSchemeful same-siteが適用されるとhttphttpscross-siteと判断します。これはCookieSameSite属性をStrictに設定したらサイト間Cookieを送信できないという意味です。場合によってはLax設定のときも送信できないでしょう。

この変更の主な目的の一つはCSRFを防ぐためです。

3. CSRF

CSRFCross-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メソッド

formPOSTメソッドも同様です。今まではhttpサイトとhttpsサイトの間にformPOSTメソッドで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://flagsSchemeful same-siteEnabledに設定したらテストできます。

5-3. 対応方法

1番いい方法はサイトを完全にhttpsへアップグレードすることです。web.devのテクブログでもこの方法を勧めています。

we strongly recommend that you upgrade your site entirely to HTTPS to protect your users

もしアップグレードできないならCookieSameSite属性をLaxに設定する方法があります。しかし、これは4-1の Navigation の場合だけ対応できてサブリソースのロード、formのPOSTメソッドの場合はhttpsアップグレード以外は厳しいです。

また、Chromethird-party Cookie を最終的に完全廃止すると発表したので、Cookie属性変更は臨時の処置にすぎません。


終わり

セキュリティとか難しいー!