Đồ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:blank
やjavascript:
の 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.html
とhttp://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 します.
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.domain
をothercompany.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:8080
とcompany.com
とは hỗ いにアクセスできません.Song phương のポートがnull
になるように, song phương で thiết định しなければなりません.
この sĩ tổ みにはいくつかの chế hạn があります. Lệ えば,document-domain
のFeature-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ị なるオリジンへのアクセスをブロックする 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ả されています.
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