All Articles

Cookie の Domain 属性と SameSite 属性の違い

はじめに

Cookie の安全な設定について調べていると登場する SameSite 属性は、Google Chrome の仕様変更の話もあり、耳にしたことがある方も少なくないと思います。

Cookie には SameSite 属性と間違えやすい設定として Domain 属性もあり、片方だけ設定すればいいのか、どう使い分けるものなのかが一見分かりにくいのではないでしょうか。

結論

結論としては、Cookie の Domain 属性は送信「先」の制限、SameSite は送信「元」の制限という違いです。

Domain 属性は Cookie を送る先を設定するもので、誤って設定すると第三者のサイトに Cookie を送信することになり、セッションハイジャックが発生する可能性があります。

SameSite 属性は Cookie を送信するもとになるサイトを指定する属性で、CSRF 攻撃に対するいくらかの防御を提供します。

設定内容も目的も全く異なるものなので、どちらか片方を設定すればいいというものではなく、両方の設定について考える必要があります

解説

Domain 属性

RFC 6265, セクション 4.1.2.3: The Domain Attribute によると

The Domain attribute specifies those hosts to which the cookie will be sent.

とのことで、つまり、Domain 属性はどのドメインへのアクセスでこの Cookie を送信するかという設定です。

1 つのドメインからだけ成り立つサービスであれば意識することはありませんが、複数のドメイン (サブドメイン) から成り立つサービスでセッションを共有する際などに使われます

例えば、「サブドメインの異なるサービス間で cookie を共有する」という記事では

https://www.nicovideo.jp  // ニコニコ動画
https://live.nicovideo.jp // ニコニコ生放送
https://ch.nicovideo.jp   // ニコニコチャンネル

という例が挙げられています。

なお、Domain 属性は、指定しなければ Cookie を発行したドメインのみ許可され、指定するとサブドメインまで許可されるため、指定しないのが一番安全です。 このことは「CookieのDomain属性は 指定しない が一番安全」という記事で解説されています。

Samesite 属性

draft-west-first-party-cookies-07 - Same-site Cookies によると、

This document updates RFC6265 by defining a “SameSite” attribute which allows servers to assert that a cookie ought not to be sent along with cross-site requests. This assertion allows user agents to mitigate the risk of cross-origin information leakage, and provides some protection against cross-site request forgery attacks.

とのことで、つまり、SameSite 属性は異なるドメインへの Cookie の送信を防ぎ、CSRF 攻撃へのある程度の防御を提供するものです。

CSRF 攻撃は、第三者のサイトから自分たちのサービスに不正にアクセスされるというものです。 SameSite を適切に設定すると、Cookie を取得したドメインからのリクエストでしか Cookie が送信されないようになるため、CSRF 攻撃への防御としてはたらくということです。 具体的な設定の解説は検索するとたくさん出てくるので、他の記事などを参照ください。

SameSite 属性については、「Chrome 80が密かに呼び寄せる地獄 ~ SameSite属性のデフォルト変更を調べてみた」という記事に書かれているように、Google Chrome がデフォルトの挙動を変更することで影響を受けるサイトが少なくないことが話題になっていました。

参考

Web

Stack Overflow に Domain 属性と SameSite 属性の違いに関する質問・回答があったので、回答をこちらに引用しておきます。

The Domain attribute restricts the hosts that the cookie will be sent to. The SameSite attribute restricts the origins from which the cookie may be sent.

What are the security differences between cookies with Domain vs SameSite strict?

書籍

Cookie の Domain 属性と SameSite 属性について、それぞれ解説している書籍として『Real World HTTP 第2版 ―歴史とコードに学ぶインターネットとウェブ技術』があります。Cookie だけでなく、HTTP について一歩深く学ぶのに非常に良い書籍です。