CORSの使用方法を理解しようとしてAccess-Control-Allow-Credentials
いますが、ヘッダーの機能について混乱しています。
ドキュメントは言う
資格情報フラグがtrueの場合に、要求への応答を公開できるかどうかを示します。
しかし、「公開されている」という応答の意味がわかりません。
このヘッダーがtrueに設定されていること(クレデンシャルフラグがtrueに設定されていることと組み合わせて)が実際に何をするかを誰かが説明できますか?
CORSの使用方法を理解しようとしてAccess-Control-Allow-Credentials
いますが、ヘッダーの機能について混乱しています。
ドキュメントは言う
資格情報フラグがtrueの場合に、要求への応答を公開できるかどうかを示します。
しかし、「公開されている」という応答の意味がわかりません。
このヘッダーがtrueに設定されていること(クレデンシャルフラグがtrueに設定されていることと組み合わせて)が実際に何をするかを誰かが説明できますか?
回答:
デフォルトでは、CORSはクロスオリジンリクエストにCookieを含めません。これは、JSON-Pなどの他のクロスオリジン技術とは異なります。JSON-Pには常にリクエストにCookieが含まれており、この動作により、クロスサイトリクエストフォージェリ(CSRF)と呼ばれる脆弱性のクラスが発生する可能性があります。
CORSでのCSRFの脆弱性の可能性を減らすために、CORSはサーバーとクライアントの両方に、要求にCookieを含めてもよいことを認めることを要求します。これを行うと、何も制御せずに受動的に発生するものではなく、Cookieが能動的な決定になります。
クライアントコードは、しなければならない設定withCredentials
のプロパティをXMLHttpRequest
するtrue
許可を与えるために。
ただし、このヘッダーだけでは十分ではありません。サーバーはヘッダーで応答する必要がありますAccess-Control-Allow-Credentials
。このヘッダーで応答true
すると、サーバーはCookie(または他のユーザー資格情報)をクロスオリジンリクエストに含めることができるようになります。
また、クロスオリジンの認証済みリクエストを機能させたい場合は、ブラウザがサードパーティのCookieをブロックしていないことを確認する必要があります。
同一オリジンまたはクロスオリジンのどちらのリクエストを作成する場合でも、サイトをCSRFから保護する必要があることに注意してください(特にリクエストにCookieが含まれている場合)。
withCredentials
設定されている場合はCookieを送信しますが、withCredentialsが設定されている場合、応答を受信すると、応答にアクセス権がある場合にのみ、結果を呼び出し側のJavaScriptに配信/公開します-Control-Allow-Credentialsヘッダーセット。ヘッダーがない場合、応答は公開されず、効果的にブラックホール化されます。