Đồng nhất オリジンポリシー

Đồng nhất オリジンポリシーは trọng yếu なセキュリティの sĩ tổ みであり, あるオリジンによって đọc み込まれた văn thư やスクリプトが, tha のオリジンにあるリソースにアクセスできる phương pháp を chế hạn するものです.

これにより, ác ý のある khả năng tính のあるドキュメントを cách ly し, khởi こりうる công kích のベクターを giảm らすことができます. Lệ えば, インターネット thượng の ác ý のあるウェブサイトがブラウザー nội で JS を thật hành して, (ユーザーがサインインしている) サードパーティのウェブメールサービスや ( công khai IP アドレスを trì たないことで công kích giả の trực tiếp アクセスから bảo hộ されている) xí nghiệp のイントラネットからデータを đọc み thủ り, そのデータを công kích giả に trung 継することを phòng ぎます.

オリジンの định nghĩa

Nhị つのページのプロトコル,ポート phiên hào(もしあれば),ホストが đẳng しい tràng hợp, lạng giả のページは đồng じオリジンです. これは “スキーム/ホスト/ポート phiên hào のタプル” または thời に単に “タプル” として tham chiếu されます ( “タプル” は cộng に toàn thể を cấu thành する tam つの bộ phân の tổ み hợp わせを biểu します).

Dĩ hạ の biểu は, các hành の URL がhttp://store.company.com/dir/page.htmlと đồng じオリジンであるかを bỉ giác したものです.

URL Kết quả Lý do
http://store.company.com/dir2/other.html Đồng nhất オリジン パスだけが dị なる
http://store.company.com/dir/inner/another.html Đồng nhất オリジン パスだけが dị なる
https://store.company.com/page.html Bất nhất trí プロトコルが dị なる
http://store.company.com:81/dir/page.html Bất nhất trí ポート phiên hào が dị なる (http://は kí định で 80 phiên ポート)
http://news.company.com/dir/page.html Bất nhất trí ホストが dị なる

オリジンの継 thừa

about:blankjavascript:の URL のページから thật hành されたスクリプトは, その URL にオリジンのサーバーについての tình báo が minh kỳ đích に hàm まれていないため, その URL を khai いた văn thư のオリジンを継 thừa します.

メモ:Lệ えば,about:blankは ( lệ えばWindow.open()メカニズムを sử dụng して) tân しい không のポップアップウィンドウを sinh thành し, その trung に thân スクリプトがコンテンツを thư き込むために sử dụng されます. ポップアップウィンドウにもコードが hàm まれた tràng hợp, そのコードはそれを sinh thành したスクリプトと đồng じオリジンを継 thừa します.

Cảnh cáo:data:の URL は tân しく, không のセキュリティコンテキストを sinh thành します.

IE における lệ ngoại sự hạng

Internet Explorer では, đồng nhất オリジンポリシーについて nhị つの đại きな lệ ngoại があります.

Tín lại tế みゾーン

Song phương のドメインがCao く tín lại されたゾーン( xí nghiệp のドメインなど) である tràng hợp は, đồng nhất オリジンの chế hạn が thích dụng されません.

ポート phiên hào

IE は đồng nhất オリジンの xác nhận yếu tố にポート phiên hào を hàm みません. 従って,http://company.com:81/index.htmlhttp://company.com/index.htmlは đồng nhất オリジンとみなされ, chế hạn は thích dụng されません.

これらの lệ ngoại sự hạng は tiêu chuẩn ngoại であり, tha のブラウザーはこのような cử động に đối ứng していません.

オリジンの変 canh

Cảnh cáo:ここで thuyết minh している (document.domainセッターを sử dụng する) phương pháp は phi thôi thưởng です. Đồng nhất オリジンポリシーによるセキュリティ bảo hộ を nhược め, ブラウザーのオリジンモデルを phục tạp にして, tương hỗ vận dụng tính の vấn đề やセキュリティバグを dẫn き khởi こすためです.

ページのオリジンは, いくつかの chế hạn の hạ で変 canh されることがあります. スクリプトを dụng いると,document.domainの trị を hiện tại のドメインまたは thượng vị ドメインに変 canh できます. スクリプトによって hiện tại のドメインの thượng vị ドメインへオリジンが変 canh された tràng hợp, より đoản くなったドメイン danh は thứ hồi のオリジン kiểm tra thời に dụng いられます.

Lệ えば,http://store.company.com/dir/other.htmlにあるドキュメント nội のスクリプトが dĩ hạ のコードを thật hành したと仮 định します.

js
document.domain = "company.com";

このコードが thật hành された hậu, そのページはhttp://company.com/dir/page.htmlにおけるオリジンの kiểm tra を thông quá できます ( hứa khả を minh kỳ するためにhttp://company.com/dir/page.htmlが tự thân のdocument.domainを "company.com"に変 canh したと仮 định します. Tường しくはdocument.domainを tham chiếu してください). しかし,company.comが tự thân のdocument.domainothercompany.comに変 canh することはできません.なぜならcompany.comの thượng vị ドメインではないためです.

ブラウザーはポート phiên hào を cá biệt に kiểm tra します.document.domainを hô び xuất すと,document.domain = document.domainの tràng hợp も hàm め, ポート phiên hào がnullで thượng thư きされます. 従って, スクリプトの tối sơ にdocument.domain = "company.com"を thiết định しただけでは,company.com:8080company.comとは hỗ いにアクセスできません.Song phương のポートがnullになるように, song phương で thiết định しなければなりません.

この sĩ tổ みにはいくつかの chế hạn があります. Lệ えば,document-domainFeature-Policyが hữu hiệu になっている tràng hợp や, văn thư がサンドボックス hóa された<iframe>Nội にある tràng hợp は, "SecurityError"のDOMExceptionが phát sinh します. また, この phương pháp でオリジンを変 canh しても, đa くの Web API (localStorage,indexedDB,BroadcastChannel,SharedWorkerなど) で sử dụng されているオリジンチェックには ảnh hưởng しません. Thất bại sự lệ のより tường tế なリストは,Document.domain > Failuresにあります.

メモ:サブドメインから thân ドメインへアクセスさせるためにdocument.domainを sử dụng する tế は, thân ドメインとサブドメインの song phương で đồng じ trị をdocument.domainに thiết định することが tất yếu です. この tác nghiệp は, thân ドメインを nguyên の trị に lệ す tế にも tất yếu です. これを đãi ると権 hạn エラーが phát sinh します.

Dị なるオリジンへのネットワークアクセス

XMLHttpRequest<img>Yếu tố を sử dụng する tràng hợp など, đồng nhất オリジンポリシーは 2 つのオリジン gian における thông tín を chế ngự します. Nhất bàn にこれらの thông tín は 3 つのカテゴリに phân loại されます.

  • Dị なるオリジンへのThư き込みは, khái して hứa khả されます. Lệ えばリンクやリダイレクト, フォームの tống tín などがあります. まれに sử dụng される HTTP リクエストの tế はプリフライトが tất yếu です.
  • Dị なるオリジンのMai め込みは, khái して hứa khả されます. Lệ は hậu thuật します.
  • Dị なるオリジンからのĐọc み込みは nhất bàn に hứa khả されませんが, mai め込みによって đọc み thủ り権 hạn がしばしば lậu れてしまいます. Lệ えば mai め込み họa tượng の phúc や cao さ, mai め込みスクリプトの động tác nội dung, あるいはMai め込みリソースでアクセス khả năng なものを đọc み thủ ることができます.

Dĩ hạ に cử げるのは, dị なるオリジンに mai め込むことができるリソースの lệ です.

  • JavaScript を<script src= "..." ></script>で sử dụng する tràng hợp. Cấu văn に quan するエラーメッセージは, đồng nhất オリジンのスクリプトについてのみ đọc み thủ り khả năng です.
  • CSS を<link rel= "stylesheet" href= "..." >で sử dụng する tràng hợp. CSS はHoãn い cấu văn quy tắcを trì っているため, オリジンをまたぐ CSS には thích thiết なContent-Typeヘッダーを phó gia することが tất yếu です. Chế ước はブラウザーにより dị なり, ブラウザーごとの tường tế はInternet Explorer,Firefox,Chrome,Safari(Nhật bổn ngữ 訳) (CVE-2010-0051 までスクロールしてください),Operaの các hạng mục を tham chiếu してください.
  • <img>で biểu kỳ された họa tượng.
  • <video>および<audio>で tái sinh されたメディア.
  • <object>または<embed>で mai め込まれた ngoại bộ リソース.
  • @font-faceが thích dụng されたフォント. Dị なるオリジンのフォントを hứa dung するブラウザーもありますが, đồng nhất オリジンを yếu cầu するものもあります.
  • <iframe>に quan liên するあらゆること. このような hình のオリジン gian のやりとりを phòng ぐため, サイトにX-Frame-Optionsヘッダーを sử dụng することができます.

Dị なるオリジンへのアクセスを hứa khả する phương pháp

Dị なるオリジンへのアクセスを hứa khả するには,CORSを sử dụng してください. CORS はHTTPの nhất bộ で, ブラウザーがコンテンツの đọc み込みを hứa khả する tha のホストをサーバーが chỉ định できるようにするものです.

Dị なるオリジンへのアクセスをブロックする phương pháp

  • Dị なるオリジンへの thư き込みを phòng ぐには, リクエスト nội のCross-Site Request Forgery (CSRF)トークンと hô ばれる thôi trắc できないトークンをチェックしてください. このトークンを tri っているページのオリジンをまたがった đọc み込みを phòng ぎます.
  • Dị なるオリジンからのリソースの đọc み込みを phòng ぐには, そのリソースが mai め込まれないようにします. リソースの mai め込まれると tình báo が lậu えいする tràng hợp があるため, đa くの tràng hợp は mai め込みの ức chỉ が tất yếu になります.
  • Dị なるオリジンによる mai め込みを phòng ぐには, リソースの hình thức が tiên ほど thuật べたような mai め込み khả năng な hình thức だと tư われないようにします. ほとんどの tràng hợp, ブラウザーはContent-Typeを tôn trọng しません. Lệ えば<script>タグで HTML văn thư を chỉ した tràng hợp, ブラウザーは HTML を JavaScript としてパースしようとします. リソースがサイトの nhập khẩu ではない tràng hợp は, mai め込みを ức chỉ するため CSRF トークンも sử dụng するとよいでしょう.

Dị なるオリジンへのスクリプトからの API によるアクセス

iframe.contentWindow,window.parent,window.open,window.openerといった JavaScript API を dụng いると, ドキュメントが trực tiếp hỗ いに tham chiếu することができます. 2 つのドキュメントが đồng nhất のオリジンではない tràng hợp,WindowオブジェクトやLocationオブジェクトなど, hạn られたオブジェクトにのみアクセスすることができます. Tường しくは thứ の 2 つのセクションで thuyết minh します.

window.postMessageを sử dụng すると, dị なるオリジンの văn thư gian における thông tín がさらに khả năng となります.

Sĩ dạng thư:HTML Living Standard § Cross-origin objects.

Window

Dĩ hạ に kỳ したWindowのプロパティは, dị なるオリジンからのアクセスが hứa khả されています.

メソッド
window.blur
window.close
window.focus
window.postMessage
Chúc tính
window.closed Đọc み thủ り chuyên dụng
window.frames Đọc み thủ り chuyên dụng
window.length Đọc み thủ り chuyên dụng
window.location Đọc み thủ り/ thư き込み
window.opener Đọc み thủ り chuyên dụng
window.parent Đọc み thủ り chuyên dụng
window.self Đọc み thủ り chuyên dụng
window.top Đọc み thủ り chuyên dụng
window.window Đọc み thủ り chuyên dụng

Nhất bộ のブラウザーでは, sĩ dạng thư で định められたものより đa くのプロパティでアクセスが hứa khả されています.

Location

Dĩ hạ に kỳ したLocationのプロパティは, dị なるオリジンからのアクセスが hứa khả されています.

メソッド
location.replace
Chúc tính
URLUtils.href Thư き込みのみ

Nhất bộ のブラウザーでは, sĩ dạng thư で định められたものより đa くのプロパティでアクセスが hứa khả されています.

オリジンをまたいだデータストレージアクセス

ウェブストレージIndexedDBなど, ブラウザー nội bộ に bảo tồn されるデータへのアクセスは, オリジンによって権 hạn が phân かれています. それぞれのオリジンが cá biệt にストレージを trì ち, あるオリジンの JavaScript から biệt のオリジンに chúc するストレージを đọc み thư きすることはできません.

Cookieにおけるオリジンの định nghĩa は dị なります. ページは tự thân のドメインまたは nhậm ý の thân ドメイン ( thân ドメインが public suffix ではない tràng hợp に hạn る) dụng の Cookie を thiết định できます. ドメインが public suffix であるかを phán đoạn する tế, Firefox と Chrome はPublic Suffix Listを sử dụng します. Internet Explorer は độc tự の phương pháp で public suffix であるかを phán đoạn します. Sử dụng しているスキーム (HTTP/HTTPS) やポートに quan hệ なく, ブラウザーはサブドメインも hàm めて Cookie を sử dụng khả năng にします. Cookie の thiết định thời にDomain,Path,Secure,HttpOnlyの các フラグを dụng いることで, その Cookie の lợi dụng phạm 囲を chế hạn できます. Cookie を đọc み thủ るとき, Cookie を thiết định した tràng sở から tri ることはできません. An toàn な https tiếp 続のみ sử dụng していたとしても, tham chiếu している Cookie は an toàn でない tiếp 続を thông じて thiết định された khả năng tính があります.

Quan liên tình báo

Nguyên điển tình báo

  • Trứ giả: Jesse Ruderman