同一生成元ポリシー(どういつせいせいげんポリシー、: Same-Origin Policy)とは、1995年Netscape社によってJavaScriptと同時にウェブブラウザに導入されたセキュリティ上の考え方で、コンテンツがブラウザに来る源泉(origin)に基づいて整理して、外部からの干渉を防ごうとする。

同一源泉ポリシー同一オリジンポリシーとも表記される。 厳密には異なるがクロスドメイン、クロスサイトの制限と表記されることもある。

Origin判定ルール 編集

Originオリジン源泉とも表記され、以下の3つを一組としてすべて一致するとき同一とみなす。 表題に反して、コンテンツは動的に生成されるとは限らない[1]

例えば、次のものは同一のところから来たと扱われる。

  • http://example.com/
  • http://example.com:80/
  • http://example.com/path/file

次のものは、お互いに別のところから来たと扱われる。

  • http://example.com/
  • http://example.com:1234/
  • http://www.example.com/
  • https://example.com/
  • http://example.org/
  • http://wikipedia.org

同一でないoriginに対する制限とその回避策 編集

異なる源泉から来たコンテンツについて、ブラウザ(正確にはユーザーエージェント)はセキュリティ上の干渉を阻止するため、さまざまな制限を行う。以下は一例である。

  • XMLHttpRequestによる取得の禁止
  • スクリプトによる別のoriginであるiframeやwindowに対する操作の制限(iframe.contentWindow、window.parent、window.open、window.openerなど)
  • Canvasへの一部の操作の制限

この制限がない場合、例えばログインしないとみることのできない情報(Wikipediaのウォッチリストや、Webメールなど)のあるサイトにログインしているとき、ほかの生成元のサイトからそれを取得されるなどの危険が生じる。

画像やスクリプト、CSSFlashなどのオブジェクトの埋め込みでは制限の内容に違いがあったり、制限されない場合がある。これを利用して、ほかの生成元と通信を行う代表的な手段がJSONPである。 セキュリティ上のリスクを理解したうえであれば、HTTPヘッダーでの指定やdocument.domainの変更などの特定の方法で許可をすることによって制限を緩和することができる。en:Cross-Origin Resource Sharing(CORS)と呼ばれ、一部の仕様はHTML5によって定められており、古いブラウザは非対応の場合もある。

また、このポリシーはブラウザの実装によってデータURIスキームの扱いなどに差異がある。

関連項目 編集

脚注 編集

  1. ^ 静的なコンテンツも対象となる。誤訳が定着してしまっている。

参考文献 編集

外部リンク 編集

  • RFC 6454
  • HTML Standard 7.5 Origin
  • URL Standard 4.7. Origin