title | emoji | type | topics | published | ||
---|---|---|---|---|---|---|
同一オリジンポリシーについて |
🔐 |
tech |
|
true |
JSなどのクライアントスクリプトからサイトをまたがったアクセスを禁止するセキュリティ上の制限のことをいいます。たとえばiframeを使ってiframeの内側のHTMLを閲覧することを制限することができます。この制限をすることでパスワードなどの秘密情報の取得をさせないようにします。
- URLのホスト(FQDN; Fully Qualified Domain Name)が一致していること
- スキーム(プロトコル)が一致していること
- ポート番号が一致していること
http://store.company.com/dir/page.html に対して下記の例で同一オリジンであるか確認してい きます。(⭕️が同一オリジン)
ここで、"http://store.company.com/dir/page.html"は ホストは"store.company.com" スキームはhttp ポート番号は80^[ポート番号の80は省略されます] だということがわかります。
URL | 結果 | 理由 |
---|---|---|
http://store.company.com/dir2/other.html | ⭕️ | |
http://store.company.com/dir/inner/another.html | ⭕️ | |
https://store.company.com/page.html | ❌ | プロトコルが異なる |
http://store.company.com:81/dir/page.html | ❌ | ポート番号が異なる |
http://news.company.com/dir/page.html | ❌ | ホストが異なる |
:::message alert 同一オリジンポリシーが守られていても、アプリケーションに脆弱性があると攻撃を受けることがあります。たとえばXSS攻撃をされるときに同一オリジンポリシーが守られていると、iframeの外側にあるJSで内側(別ホスト)をアクセスするとアクセス拒否されます。しかし、内側にJSを送り込んで実行することができた場合、同一オリジンポリシーの制約を受けないので攻撃することができます。 :::
:::details CORS(Cross-Origin Resource Sharing)について 同一オリジンポリシーが守られていなくても、サイト間で通信するときに相手側の許可があれば同一オリジンでなくても通信ができる仕様のことをCORSといいます。 本では、XMLHttpRequestのケースで説明されてます。 :::