[4] [DFN[[RUBY[同一起源方針][どういつきげんほうしん][same origin policy]]]]は、 [[Web]] において、[[スクリプト]]が異なる[[起源]] (一般には[[ドメイン]]) に由来する[[物体]]に対してアクセスすることを制限する[[安全性]]に関する方針です。 [5] 仕様書: - [3] [CITE@en-US-x-hixie[HTML 5]] ([TIME[2008-07-04 05:49:35 +09:00]] 版) * 適用対象 [9] @@ ・・・ [[#comment]] * 適用対象外 [10] 歴史的な理由により、次の場合には同一起源方針は適用されません。 - [CODE(HTMLa)@en[[[src]]]] [[属性]]、 [CODE(HTMLe)@en[[[object]]]] [[要素]]、 [CODE(HTMLe)@en[[[embed]]]] [[要素]]、 [CODE(HTMLe)@en[[[link]]]] [[要素]]などによる外部[[資源]]の埋め込み -- [CODE(HTMLe)@en[[[img]]]] [[要素]]や [CODE(HTMLe)@en[[[iframe]]]] [[要素]]など -- [CODE(HTMLe)@en[[[script]]]] [[要素]]による外部[[スクリプト]]の参照も含みます。 これがそもそも設計上の意図的なものなのか、設計ミスなのかはわかりませんが、 [[JSONP]] などで同一起源方針を擦り抜けるテクニックとしてよく利用されています。 -- これらの[[要素]]や[[属性]]を使うと、本来[[スクリプト]]から取得できないべきである、 異なる[[起源]]の情報を取得することができてしまいます。前述のスクリプト実行だけでなく、 例えば、[[画像]]の大きさを取得することで、その内容を推測できてしまうかもしれません。 [11] 制約の緩和: -[15] [CODE(JS)@en[[[document]].[[domain]]]] [[DOM属性]]に値を設定することにより、 [[起源]]となる[[ドメイン名]]を変更することができます。 ただし、新しい[[ドメイン名]]は元の[[ドメイン名]]の上位階層に当たるものでなければなりません。 -[12] [CODE(HTTP)@en[[[Access-Control]]:]] [[頭欄]]や [CODE(XML)@en[[[access-control]]]] [[処理指令]]を用いることによって、 ''外部[[資源]]は''、異なる[[起源]]からの読み込みアクセスを許可することができます。 -[13] [[Microsoft]] が提案し、 [[WinIE 8]] で実装している [CODE(DOMi)@en[[[XDomainRequest]]]] を用いると、 異なる[[ドメイン]]の[[資源]]にアクセスできます。 -[14] [[WinIE]] で実装されている[[セキュリティ・ゾーン]]の機能により、 [[イントラネット]]等[[ゾーン]]毎に、 [[同一起源方針]]を[[利用者]]の設定により緩和することができます。 [[#comment]] * 歴史 [6] 同一起源方針は、 [[Netscape Navigator]] 2.0 で [[JavaScript]] と共に導入され [SRC[>>1、>>2]]、2.01 および 2.02 で不具合の修正がなされました [SRC[>>1]]。 [7] [[Internet Explorer]] をはじめとする他ブラウザも同様にこの制限を実装しましたが、 [[ECMAScript]] 仕様や [[DOM]] 仕様としての標準化の対象外とされ、 長らく明文化された規定が存在していませんでした。 [8] [[HTML DOM]] に関係する部分はようやく2005年頃に [[WHATWG]] によって [[HTML 5]] 仕様の一部として仕様の明文化が行われ始めました。 また、 [[XMLHttpRequest]] に関しては [[HTML 5]] 仕様を参照する形で規定されています。 [[#comment]] * メモ [2] [CITE[JavaScript Security: Same Origin]] ([CODE[2008-06-18 04:13:16 +09:00]] 版) [1] [CITE@en[Same origin policy - Wikipedia, the free encyclopedia]] ([CODE[2008-07-02 01:06:45 +09:00]] 版)