説明
任意のリクエストOriginと認証情報の送信を許可すると、ブラウザーが認証情報を送信する条件で、信頼できないWebサイトが保護されたレスポンスを読み取れるおそれがあります。実際にCookieが送信されるかどうかは、クライアント設定、SameSite、ブラウザーのポリシーにも左右されます。
AllowAnyOrigin() と AllowCredentials() の組み合わせは、認証情報を伴うCORSの有効な構成ではありません。この制限を回避するために SetIsOriginAllowed(_ => true) を使うと、任意のOriginを信頼することになります。CORSはサーバー側の認証や権限チェックを代替しません。
想定される影響
- ユーザーの認証Cookieが送信されると、信頼できないオリジンから認証済みのレスポンスを読み取り、データを盗まれるおそれがあります。
対処方法
スキーム、ホスト、ポートを明示した信頼できるオリジンだけを許可し、認証情報の送信は必要な場合に限って許可してください。任意のOriginをそのまま応答に反映せず、サーバー側の認証や権限チェックも維持してください。
例
各抜粋は、別々の CorsPolicyBuilder の設定です。ポリシーの登録とエンドポイントへの適用は省略しています。
変更前
csharp
policy.SetIsOriginAllowed(_ => true).AllowCredentials();
変更後
csharp
policy.WithOrigins("https://app.example.com").AllowCredentials();
解説:
- 変更前: すべてのOriginを信頼し認証情報を許可するため、認証情報が送信されると、信頼できないオリジンからもレスポンスを読み取れます。
- 変更後: 明示的に信頼するオリジンを使用し、任意のOriginヘッダーをそのまま反映しないでください。