web-dev-qa-db-ja.com

AJAX CORSとセキュリティの考慮事項を理解する

CORSが機能するように機能している理由を理解しようとしています。

この投稿 から学んだように、www.a.comのページがAJAX =www.b.comにリクエストすると、www.b.comリクエストを許可するかどうかを決定します。

しかし、そのようなモデルのクライアントでは何が正確に保護されますか?たとえば、ハッカーが自分のページにXSSスクリプトインジェクションを成功させると、ユーザーデータを保存するためにAJAX=リクエストをドメインに送信します。そのため、ハッカーのドメインはそのようなリクエストを許可します承知しました。

www.a.comがリクエストを許可するドメインを決定する必要があると思いました。したがって、理論的にはヘッダー内にAccess-Control-Allow-Origin私はAJAX CORSリクエスト。

現在のCORS実装が処理するセキュリティ問題について誰かが説明できますか?

21
Alex Dn

私がこの投稿から学んだように、www.a.comのページがAJAX www.b.comへのリクエストを行うとき、リクエストが許可されるかどうかを決定するのはwww.b.comです。

結構です。リクエストはブロックされていません。

デフォルトでは、www.a.comで実行されているJavaScriptは、www.b.comからの応答へのアクセスを禁止されています。

CORSは、www.b.comwww.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)で対処する必要がある別のセキュリティ問題です。

28
Quentin

@ 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'は現在のオリジンに一致しますが、そのサブドメインには一致しません

ここを参照 サポートされているブラウザの場合。

5
SilverlightFox