1. ホーム
  2. http-headers

[解決済み】Access-Control-Allow-Credentialsヘッダーは、具体的に何をするのでしょうか?

2022-05-11 07:51:35

質問

CORSの使用方法を理解しようとしているのですが、CORSを使用するための Access-Control-Allow-Credentials ヘッダは何をするのですか?

ドキュメント は言う。

リクエストに対するレスポンスの公開の可否を示す credentialsフラグがtrueの場合。

しかし、レスポンスが "exposed"であることの意味がよくわかりません。

このヘッダがtrueに設定されることで、(credentialsフラグがtrueに設定されることと合わせて)実際に何をするのか、誰か説明してくれますか?

どのように解決するのですか?

デフォルトでは、CORS はクロスオリジンリクエストにクッキーを含めません。これは、JSON-P などの他のクロスオリジン技術とは異なる点です。JSON-P は常にリクエストにクッキーを含めますが、この動作は、以下のような脆弱性のクラスにつながる可能性があります。 クロスサイトリクエストフォージェリ CSRFと呼ばれる。

CORSでCSRF脆弱性の可能性を減らすために、CORSではサーバーとクライアントの両方が、リクエストにクッキーを含めても問題ないことを認める必要があります。こうすることで、クッキーは、何の制御もなく受動的に起こるものではなく、能動的に決定されるようになります。

クライアントコード が必要です。 を設定します。 withCredentials プロパティは XMLHttpRequest から true を許可することです。

しかし、このヘッダーだけでは十分ではありません。サーバーは が必要です。 で応答します。 Access-Control-Allow-Credentials ヘッダを表示します。このヘッダーで応答することで true は、cross-originリクエストにCookie(または他のユーザー認証情報)が含まれることをサーバーが許可していることを意味します。

また ブラウザがサードパーティーのCookieをブロックしていないこと を使用することができます。

セイムオリジン、クロスオリジンリクエストにかかわらず、CSRFからサイトを保護する必要があることに注意してください(特にリクエストがクッキーを含む場合)。