CORSが機能するように機能している理由を理解しようとしています。
この投稿 から学んだように、www.a.comのページがAJAX =www.b.comにリクエストすると、www.b.comリクエストを許可するかどうかを決定します。
しかし、そのようなモデルのクライアントでは何が正確に保護されますか?たとえば、ハッカーが自分のページにXSSスクリプトインジェクションを成功させると、ユーザーデータを保存するためにAJAX=リクエストをドメインに送信します。そのため、ハッカーのドメインはそのようなリクエストを許可します承知しました。
www.a.comがリクエストを許可するドメインを決定する必要があると思いました。したがって、理論的にはヘッダー内にAccess-Control-Allow-Origin私はAJAX CORSリクエスト。
現在のCORS実装が処理するセキュリティ問題について誰かが説明できますか?
私がこの投稿から学んだように、
www.a.com
のページがAJAXwww.b.com
へのリクエストを行うとき、リクエストが許可されるかどうかを決定するのはwww.b.com
です。
結構です。リクエストはブロックされていません。
デフォルトでは、www.a.com
で実行されているJavaScriptは、www.b.com
からの応答へのアクセスを禁止されています。
CORSは、www.b.com
がwww.a.com
からのJavaScriptに応答にアクセスする許可を与えることを許可します。
しかし、そのようなモデルでクライアントで正確に保護されているものは何ですか?
両方のサイトにアクセスし、www.a.com
で認証された(したがって、非公開のデータにアクセスできる)ユーザーのブラウザーを使用して、www.b.com
の作成者がwww.b.com
からデータを読み取るのを停止します。
たとえば、アリスはGoogleにログインしています。アリスは、XMLHttpRequestを使用してmalicious.example
のデータにアクセスするgmail.com
を訪問します。 AliceはGMailアカウントを持っているため、応答には受信トレイにある最新のメールのリストがあります。同じOriginポリシーにより、malicious.example
はそれを読み取ることができません。
たとえば、ハッカーが私のページにXSSスクリプトインジェクションを実行すると、ユーザーデータを保存するためにAJAX=リクエストをドメインに送信します。したがって、ハッカードメインはそのようなリクエストを確実に許可します。
正しい。 XSSは、ソース(つまり、ブラウザーではなくwww.a.com
)で対処する必要がある別のセキュリティ問題です。
@ Quentinの優れた回答 に加えて、 コンテンツセキュリティポリシー と呼ばれる別のテクノロジーがあり、あなたが何を求めているかを説明します。
Www.a.comは、リクエストを許可するドメインを決定する必要があると思いました。したがって、理論的にはヘッダーAccess-Control-Allow-Origin内に、AJAX CORSリクエストで許可されているドメインのリスト全体を配置します。
CSPを使用すると、ドメイン(例ではwww.a.com
)のヘッダーを設定してAJAXリクエストを制限できます。
connect-srcは、接続できるオリジンを制限します(XHR、WebSocket、およびEventSourceを介して)。
これを使用するには、このContent-Security-Policy
HTTPヘッダーをHTML応答に追加します。
Content-Security-Policy: connect-src 'self'
これにより、ヘッダーがwww.a.com
からの応答にある場合、AJAX www.a.com
へのリクエストが制限されます。
'self'は現在のオリジンに一致しますが、そのサブドメインには一致しません
ここを参照 サポートされているブラウザの場合。