From 8ffdcbc556ea949c0212554ec2b7d75d4a5828dc Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Thu, 15 Jul 2021 00:00:25 +0900 Subject: Web/Security/Same-origin_policy を更新 (#1419) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 2021/06/05 時点の英語版に同期 - fix #1403 --- .../ja/web/security/same-origin_policy/index.html | 64 ++++++++++++---------- 1 file changed, 36 insertions(+), 28 deletions(-) (limited to 'files/ja/web/security') diff --git a/files/ja/web/security/same-origin_policy/index.html b/files/ja/web/security/same-origin_policy/index.html index 42ebea014a..213ffab6b6 100644 --- a/files/ja/web/security/same-origin_policy/index.html +++ b/files/ja/web/security/same-origin_policy/index.html @@ -14,9 +14,11 @@ translation_of: Web/Security/Same-origin_policy ---
{{QuickLinksWithSubpages("/ja/docs/Web/Security")}}
-

同一オリジンポリシーとは、あるオリジンから読み込まれた文書やスクリプトについて、そのリソースから他のオリジンのリソースにアクセスできないように制限するものです。同一オリジンポリシーはウェブのセキュリティにおける重要な仕組みであり、悪意ある行動を起こしかねないリソースの分離を目的としています。

+

同一オリジンポリシーは重要なセキュリティの仕組みであり、ある{{Glossary("origin", "オリジン")}}によって読み込まれた文書やスクリプトが、他のオリジンにあるリソースにアクセスできる方法を制限するものです。制限するものです。

-

オリジンの定義

+

これにより、悪意のある可能性のあるドキュメントを隔離し、起こりうる攻撃のベクターを減らすことができます。例えば、インターネット上の悪意のあるウェブサイトがブラウザー内で JS を実行して、 (ユーザーがサインインしている) サードパーティのウェブメールサービスや (公開 IP アドレスを持たないことで攻撃者の直接アクセスから保護されている) 企業のイントラネットからデータを読み取り、そのデータを攻撃者に中継することを防ぎます。

+ +

オリジンの定義

二つのページの{{Glossary("protocol", "プロトコル")}}、{{Glossary("port", "ポート番号")}} (もしあれば)、{{Glossary("host", "ホスト")}}が等しい場合、両者のページは同じオリジンです。これは「スキーム/ホスト/ポート番号のタプル」または時に単に「タプル」として参照されます (「タプル」は共に全体を構成する三つの部分の組み合わせを表します)。

@@ -57,7 +59,7 @@ translation_of: Web/Security/Same-origin_policy -

オリジンの継承

+

オリジンの継承

about:blankjavascript: の URL のページから実行されたスクリプトは、その URL にオリジンのサーバーについての情報が明示的に含まれていないため、その URL を開いた文書のオリジンを継承します。

@@ -69,7 +71,7 @@ translation_of: Web/Security/Same-origin_policy

data: の URL は新しく、空のセキュリティコンテキストを生成します。

-

IE における例外事項

+

IE における例外事項

Internet Explorer では、同一オリジンポリシーについて二つの大きな例外があります。

@@ -82,7 +84,11 @@ translation_of: Web/Security/Same-origin_policy

これらの例外事項は標準外であり、他のブラウザーはこのような挙動に対応していません。

-

オリジンの変更

+

オリジンの変更

+ +
+

ここで説明している ({{domxref("document.domain")}} セッターを使用する) 方法は非推奨です。同一オリジンポリシーによるセキュリティ保護を弱め、ブラウザーのオリジンモデルを複雑にして、相互運用性の問題やセキュリティバグを引き起こすためです。

+

ページのオリジンは、いくつかの制限の下で変更されることがあります。スクリプトを用いると、 {{domxref("document.domain")}} の値を現在のドメインまたは上位ドメインに変更できます。スクリプトによって現在のドメインの上位ドメインへオリジンが変更された場合、より短くなったドメイン名は次回のオリジン検査時に用いられます。

@@ -95,53 +101,55 @@ translation_of: Web/Security/Same-origin_policy

ブラウザーはポート番号を個別に検査します。 document.domain を呼び出すと、 document.domain = document.domain の場合も含め、ポート番号が null で上書きされます。従って、スクリプトの最初に document.domain = "company.com" を設定しただけでは、 company.com:8080company.com とは互いにアクセスできません。双方のポートが null になるように、双方で設定しなければなりません。

+

この仕組みにはいくつかの制限があります。例えば、 document-domainFeature-Policy が有効になっている場合や、文書がサンドボックス化された <iframe> 内にある場合は、 "SecurityError" の DOMException が発生します。また、この方法でオリジンを変更しても、多くの Web API (localStorageindexedDBBroadcastChannelSharedWorker など) で使用されているオリジンチェックには影響しません。失敗事例のより詳細なリストは、 Document.domain > Failures にあります。

+
-

注: サブドメインから安全に親ドメインへアクセスさせるために document.domain を使用する際は、親ドメインとサブドメインの双方で同じ値を document.domain に設定することが必要です。この作業は、単に親ドメインを元の値に戻す際にも必要です。これを怠ると権限エラーが発生します。

+

注: サブドメインから親ドメインへアクセスさせるために document.domain を使用する際は、親ドメインとサブドメインの双方で同じ値を document.domain に設定することが必要です。この作業は、親ドメインを元の値に戻す際にも必要です。これを怠ると権限エラーが発生します。

-

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

+

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

{{domxref("XMLHttpRequest")}} や {{htmlelement("img")}} 要素を使用する場合など、 同一オリジンポリシーは 2 つのオリジン間における通信を制御します。一般にこれらの通信は 3 つのカテゴリに分類されます。

以下に挙げるのは、異なるオリジンに埋め込むことができるリソースの例です。

-

異なるオリジンへのアクセスを許可する方法

+

異なるオリジンへのアクセスを許可する方法

-

異なるオリジンへのアクセスを許可するには、 CORS を使用してください。 CORS は {{Glossary("HTTP")}} の一部で、サーバーがクライアントに、どのホストがそのサーバーからコンテンツを読み込むことが許可されているかを共有する機能です。

+

異なるオリジンへのアクセスを許可するには、 CORS を使用してください。 CORS は {{Glossary("HTTP")}} の一部で、ブラウザーがコンテンツの読み込みを許可する他のホストをサーバーが指定できるようにするものです。

-

異なるオリジンへのアクセスをブロックする方法

+

異なるオリジンへのアクセスをブロックする方法

-

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

+

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

{{domxref("HTMLIFrameElement.contentWindow", "iframe.contentWindow")}}, {{domxref("window.parent")}}, {{domxref("window.open")}}, {{domxref("window.opener")}} といった JavaScript API を用いると、ドキュメントが直接互いに参照することができます。2 つのドキュメントが同一のオリジンではない場合、 {{domxref("Window")}} オブジェクトや {{domxref("Location")}} オブジェクトなど、限られたオブジェクトにのみアクセスすることができます。詳しくは次の 2 つのセクションで説明します。

{{domxref("window.postMessage")}} を使用すると、異なるオリジンの文書間における通信がさらに可能となります。

-

仕様書: HTML Living Standard § Cross-origin objects.

+

仕様書: HTML Living Standard § Cross-origin objects.

-

Window

+

Window

以下に示した Window のプロパティは、異なるオリジンからのアクセスが許可されています。

@@ -216,7 +224,7 @@ translation_of: Web/Security/Same-origin_policy

一部のブラウザーでは、仕様書で定められたものより多くのプロパティでアクセスが許可されています。

-

Location

+

Location

以下に示した Location のプロパティは、異なるオリジンからのアクセスが許可されています。

@@ -250,23 +258,23 @@ translation_of: Web/Security/Same-origin_policy

一部のブラウザーでは、仕様書で定められたものより多くのプロパティでアクセスが許可されています。

-

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

+

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

ウェブストレージIndexedDB など、ブラウザー内部に保存されるデータへのアクセスは、オリジンによって権限が分かれています。それぞれのオリジンが個別にストレージを持ち、あるオリジンの JavaScript から別のオリジンに属するストレージを読み書きすることはできません。

-

{{glossary("Cookie", "Cookie")}} におけるオリジンの定義は異なります。ページは自身のドメインまたは任意の親ドメイン (親ドメインが public suffix ではない場合に限る) 用の Cookie を設定できます。 ドメインが public suffix であるかを判断する際、Firefox と Chrome は Public Suffix List を使用します。 Internet Explorer は独自の方法で public suffix であるかを判断します。使用しているスキーム (HTTP/HTTPS) やポートに関係なく、ブラウザーはサブドメインも含めて Cookie を使用可能にします。Cookie の設定時に Domain, Path, Secure, HttpOnly の各フラグを用いることで、その Cookie の利用範囲を制限できます。Cookie を読み取るとき、Cookie を設定した場所から知ることはできません。安全な https 接続のみ使用していたとしても、参照している Cookie は安全でない接続を通じて設定された可能性があります。

+

{{glossary("Cookie", "Cookie")}} におけるオリジンの定義は異なります。ページは自身のドメインまたは任意の親ドメイン (親ドメインが public suffix ではない場合に限る) 用の Cookie を設定できます。 ドメインが public suffix であるかを判断する際、Firefox と Chrome は Public Suffix List を使用します。 Internet Explorer は独自の方法で public suffix であるかを判断します。使用しているスキーム (HTTP/HTTPS) やポートに関係なく、ブラウザーはサブドメインも含めて Cookie を使用可能にします。Cookie の設定時に Domain, Path, Secure, HttpOnly の各フラグを用いることで、その Cookie の利用範囲を制限できます。Cookie を読み取るとき、Cookie を設定した場所から知ることはできません。安全な https 接続のみ使用していたとしても、参照している Cookie は安全でない接続を通じて設定された可能性があります。

-

関連情報

+

関連情報

-
-

出典情報

+

原典情報

-
-- cgit v1.2.3-54-g00ecf