TL;DR

異なるオリジン(Cross-origin)間で、リソースへのアクセスを制限するセキュリティの仕組み。XSS や CSRF などの攻撃を軽減・防止できる。

仕組み

スキーム、ホスト、ポート番号がすべて同じとき、オリジンが同じ(Same-origin)とみなす。

window.opener のような JavaScript の API で異なるオリジンの情報を参照しようとすると、一部の情報は読み書きできないように制限される。

XMLHttpRequest や <img> で異なるオリジンとネットワーク越しにデータをやり取りする場合は、次の 3 つに分類される。

  • 異なるオリジンへの書き込みは許可される。 リンクやフォームの送信がこれに当たる。
  • 異なるオリジンのリソースの埋め込みは許可される。 <iframe>、<script>、<link> などのタグで、別のオリジンのリソースを自分の Web サイトに埋め込める。Google マップや X の投稿を埋め込むのがその例である。
  • 異なるオリジンからの読み込みは、原則として許可されない。 読み込みたい場合は、CORS で明示的に許可する必要がある。

例

URL 1URL 2同じオリジンか
https://www.example.com:443https://www.evil.com:443Cross-origin(ドメイン名が異なる)
https://www.example.com:443https://abc.example.com:443Cross-origin(サブドメインが異なる)
https://www.example.com:443http://www.example.com:443Cross-origin(スキームが異なる)
https://www.example.com:443https://www.example.com:80Cross-origin(ポート番号が異なる)
https://www.example.com:443https://www.example.com:443Same-origin

関連

出典