web-dev-qa-db-ja.com

Access-Control-Allow-OriginワイルドカードはセッションCookieの送信を許可しません

CORSの制限は次のシナリオを無効にすることだといつも思っていました。

Attacker.comに入り、JSがGET facebook.comを送信し、ブラウザがcookieを追加し、attacker.comがfacebookプロファイル/フィードにアクセスできるようになります。

だが

http://shop.domain.com からMY http://www.domain.com/api/accounts/me にGETリクエストを送信しようとしています私のショップでいくつかのユーザー情報を共有したいので、javascriptを使用します。 shop.domain.comはshopifyなので、このサブドメインにバックエンドコードを配置できません。

私はこのエラーを受け取りました:

Access to XMLHttpRequest at 'https://www.domain.com/api/accounts/me' from Origin 'https://shop.domain.com' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

私のAPIはAccess-Control-Allow-Origin: *を返し、資格情報を投稿できません。 Access-Control-Allow-Origin: *の使用例は何ですか?なぜ機能しないのかは理解できますが、このヘッダーが存在しない場合、何から保護されますか?.

このヘッダーはどのような変化をもたらしますか?

また、私のCookieはドメイン全体ではHTTPのみなので、shop.domain.comのJSはセッションIDを抽出することはできません。

2
EralpB

Access-Control-Allow-Origin: *の使用例は、任意のドメインからのクロスオリジンXHRを許可することです。これは一部のパブリックAPIに役立ちます。

ただし、サイトでユーザーが最初にログインし、セッションCookie(または基本認証)を使用してユーザーの認証を維持する必要がある場合、このセッション内のXHR(つまり、資格情報を使用)は、通常、同じドメインであるか、場合によってはクロスドメインであると見なされます-起源、ただし選択したドメインからのみ。資格情報を含む任意のドメインからのクロスオリジンXHRは、致命的な設定ミスである可能性が非常に高いです。このような構成ミスの最も明白なケースを不可能にするために、Access-Control-Allow-Origin: *withCredentials=trueの組み合わせは失敗します。資格情報付きのクロスオリジンXHRが必要な場合は、ワイルドカードを使用するのではなく、この種の機密アクセスを許可するオリジンを明示的に指定する必要があります。

MDN:資格情報を使用したリクエスト も参照してください。

3
Steffen Ullrich