🌐

same-site/cross-site, same-origin/cross-originをちゃんと理解する

2021/03/29に公開

same-site/cross-site, same-origin/cross-origin の違いを曖昧なままにしておくと、分からないことや誤解がモリモリ増えていきますので、早いうちに定義を覚えちゃいましょう。

元記事はこちら:
https://web.dev/same-site-same-origin/

Origin とは

Origin は scheme (http とか https とか)、hostnameport の組み合わせを指す。same-origin と言った場合、これらすべてが一致するものを示している。一部でも異なるものはすべて cross-origin。

Origin A Origin B 解説
https://www.example.com:443 https://www.evil.com:443 cross-origin: hostname が異なる
https://www.example.com:443 https://example.com:443 cross-origin: hostname が異なる
https://www.example.com:443 https://login.example.com:443 cross-origin: hostname が異なる
https://www.example.com:443 http://www.example.com:443 cross-origin: scheme が異なる
https://www.example.com:443 https://www.example.com:80 cross-origin: port が異なる
https://www.example.com:443 https://www.example.com:443 same-origin: 完全一致
https://www.example.com:443 https://www.example.com same-origin: 明示されていないが HTTPS の port は 443 なので完全一致

Site とは

.com.org は Top-level domain (TLD) と呼ばれ、Root Zone Database に掲載されている。基本的に Site とは、scheme と、TLD とそのすぐ左側にある部分を合わせたもの (例: https://example.com) であり、サブドメインや port は含まれない。

ただし、厳密な TLD 以外にも .co.jp.github.io など、実質的に TLD として扱われているものがあり、これらはアルゴリズムで導き出すことができないため、Public Suffix List という形でまとめられている。これらは effective TLD (eTLD) と呼ばれる。

それを踏まえると、Site とは scheme と、eTLD とそのすぐ左側にある部分を合わせたもの (scheme と eTLD+1) であるとまとめることができる (例: https://project.github.io)。逆に言えば、same-site とは same-origin と比較して、異なるサブドメイン、異なる port が許容されるものである。

Origin A Origin B 解説
https://www.example.com:443 https://www.evil.com:443 cross-site: eTLD+1 が異なる
https://www.example.com:443 https://login.example.com:443 same-site: サブドメインが異なっても scheme と eTLD+1 が一致していれば同じサイトとして扱う
https://www.example.com:443 http://www.example.com:443 cross-site: scheme が異なる
https://www.example.com:443 https://www.example.com:80 same-site: port の違いは無視
https://www.example.com:443 https://www.example.com:443 same-site: 完全一致
https://www.example.com:443 https://www.example.com same-site: port の違いは無視(明示されていないが HTTPS の port は 443 なので完全一致)

Schemeless same-site とは

以前の same-site と呼ばれていたもの、つまり eTLD+1 だけ一致した場合は schemeless same-site と呼ばれる。

Origin A Origin B 解説
https://www.example.com:443 https://www.evil.com:443 cross-site: eTLD+1 が異なる
https://www.example.com:443 https://login.example.com:443 schemeless same-site: サブドメインが異なっても eTLD+1 が一致していれば scheme を除いた同じサイトとして扱う
https://www.example.com:443 http://www.example.com:443 schemeless same-site: eTLD+1 が一致していれば scheme を除いた同じサイトという条件は満たす

Discussion