same-site/cross-site, same-origin/cross-originをちゃんと理解する
same-site/cross-site, same-origin/cross-origin の違いを曖昧なままにしておくと、分からないことや誤解がモリモリ増えていきますので、早いうちに定義を覚えちゃいましょう。
元記事はこちら:
Origin とは
Origin は scheme
(http
とか https
とか)、hostname
、port
の組み合わせを指す。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