web-dev-qa-db-ja.com

Access-Control-Allow-Originにはどのような目的がありますか?

CORSについて誤解していますAccess-Control-Allow-Originヘッダー。

その名前は「許可」とあり、許可されていない「オリジン」からリクエストを送信すると、リクエストは失敗することを理解しています。

しかし、いつでも変更できます/etc/hosts「Origin」が私のIPアドレスを指すようにします。

たとえば、次のような応答が含まれる場合:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://example.com
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-Credentials

いつでも変更できます/etc/hostsあり:

127.0.0.1   example.com

...そして通話は機能します。

このヘッダーは正確に何を許可していますか?使ってもいいですか Access-Control-Allow-Origin: * の代わりに Access-Control-Allow-Origin: http://example.com?違いは何ですか?

5
pepe

その名前は「許可」とあり、許可されていない「オリジン」からリクエストを送信すると、リクエストは失敗することを理解しています。

そうです(リクエストによって異なります)。しかし、リクエストを禁止することは [〜#〜] cors [〜#〜] のプロパティではありません 同じOriginポリシー が原因です。

CORSは、実際には何かを保護するためのヘッダーではなく、同じOriginポリシーを弱め、クロスOriginリクエスト(一部のアプリケーションで必要になる場合があります)を許可するためのヘッダーです。

特にアクセス制御用に設計されていないため、システム構成を変更することでWebサイトにアクセスできても、セキュリティに影響はありません。

3
tim

CORSポリシーは、サイトAから読み込まれ、ブラウザーで実行されるコードがサイトBで実行できることを制限します。つまり、クロスオリジンリクエストで実行できることを制限します。サイトBで実行できることを一般的に制限するものではありません。つまり、クロスオリジンリクエストのみを対象とし、いかなる種類の認証制御も提供しません。

理論的には、このポリシーをバイパスするようにシステムを変更するだけでよいのはあなたです。しかし、一部のリモートWebサーバーの攻撃者はそれを実行できません。サイトBの攻撃者がサイトAに対してクロスサイトリクエストを使用したいが、サイトAがサイトGのみを許可している場合、攻撃者はブラウザーのサイトGとして表示される必要があります。そのためには、攻撃者がシステムまたはサイトGのDNS設定にアクセスできる必要がありますが、これは通常、攻撃者が予期することではありません。

3
Steffen Ullrich

Access-Control-Allow-OriginSame Origin Policy がどのように処理するかに関してエンドユーザーに提供される保護を変更しますAJAX応答。

ユーザーが自分自身でこの保護をさらに変更するためにホストファイルをいじくりまわすつもりなら、ユーザーが侵害しているのは自分のセキュリティだけです。

ヘッダーにより、クロスオリジンリクエストがヘッダーを出力するオリジンに送信された場合、別のオリジンがAJAXレスポンスを読み取ることができます。

Access-Control-Allow-Origin: *の代わりにAccess-Control-Allow-Origin: http://example.comを使用できますか?違いは何ですか?

違いは、最初のオプションでは、OriginにAJAX応答の読み取りを許可します。2番目のオプションでは、http://example.comにAJAX応答の読み取りのみを許可します。

Access-Control-Allow-Credentialsがtrueの場合、最初のオプションは機能しません-CORSは、グローバル認証情報リクエストまでウェブサイトを開くことを許可しません。その場合、あなたのウェブサイトは機密情報を保持していました(たとえば、GmailにはAJAX関数が受信トレイにメッセージを返す)場合があります)、ユーザーがアクセスするどのWebサイトもこの機密情報を読み取ることができます。現在のユーザーのセッションのコンテキストでのWebサイトからの情報。

すべてのオリジンが現在のユーザーのセッションから読み取れるようにしたい場合は、Originリクエストヘッダーを読み取って、このオリジンをAccess-Control-Allow-Originヘッダーに反映できます(適切にサニタイズするように注意してください)もちろん、CRLFなどを削除します)。これは、Access-Control-Allow-Origin: *を出力し、Access-Control-Allow-Credentialsを介して認証されたリクエストを許可することと実質的に同じです。

0
SilverlightFox