web-dev-qa-db-ja.com

Access-Control-Allow-Credentialsヘッダーは正確に何をしますか?

CORSの使用方法を理解しようとしていますが、Access-Control-Allow-Credentialsヘッダーの機能について混乱しています。

ドキュメント は言う

資格情報フラグがtrueの場合に、要求への応答を公開できるかどうかを示します。

しかし、応答が「公開」されていることの意味がわかりません。

このヘッダーがtrueに設定されていることを(trueに設定されている資格情報フラグと組み合わせて)誰が実際に行うかを説明できますか?

130
Nate

デフォルトでは、CORSにはクロスオリジンリクエストのCookieは含まれません。これは、JSON-Pなどの他のクロスオリジンテクニックとは異なります。 JSON-Pには常にリクエストにCookieが含まれており、この動作により クロスサイトリクエストフォージェリー またはCSRFと呼ばれる脆弱性のクラスが発生する可能性があります。

CORSのCSRF脆弱性の可能性を減らすために、CORSでは、サーバーとクライアントの両方に、リクエストにCookieを含めることを認めることを要求します。これを行うと、制御なしで受動的に発生するものではなく、Cookieがアクティブな決定になります。

クライアントコードmustは、withCredentialsXMLHttpRequestプロパティをtrueに設定して、許可を与えます。

ただし、このヘッダーだけでは十分ではありません。サーバーmustAccess-Control-Allow-Credentialsヘッダーで応答します。このヘッダーでtrueに応答するということは、サーバーがCookie(または他のユーザー資格情報)がクロスオリジンリクエストに含まれることを許可することを意味します。

また、クロスオリジン認証要求を機能させるには、 ブラウザがサードパーティのCookieをブロックしていない を確認する必要があります。

同じオリジンまたはクロスオリジンリクエストを行うかどうかに関係なく、サイトをCSRFから保護する必要があることに注意してください(特にリクエストにCookieが含まれる場合)。

221
monsur