私のASP.NETMVCアプリケーションは、ValidateAntiForgeryToken属性を使用し、Html.AntiForgeryTokenを呼び出して、トークン値を使用して非表示の入力要素を書き込み、トークンをCookieに配置することで、CSRF攻撃を防ぎます。
私の例外ログは、有効なリクエストからトリガーされたように見えるHttpAntiForgeryExceptionの発生を報告しています(リファラーは正しいように見えます)。例外の原因となった応答には、フォームフィールドにトークン値とともに__RequestValidationTokenも含まれています。ただし、必要なCookieがリクエストから欠落しているため、検証が失敗し、例外がスローされます。
私はこのCookieが欠落している理由を考えようとしており、次の考えられる理由を考え出しました。
- ドメインのCookieコレクションがいっぱいです。-これがここに当てはまる場合、各リクエストで20/50のCookieが表示されると予想され(ところで、すべてのユーザーエージェントはIE7とIE8です)、どういうわけかCookieが削除されています。例外のさまざまな発生で3〜23個のCookieが表示されます
- Cookieのデータ制限に達しました。-これは起こっていません。ログを見ると、cookieコレクションが少ないことがわかります。
- Cookieを追加する前に、応答が返送されています。-これについてはよくわかりません。ヘッドでReponse.Flushを手動で呼び出すと、応答が送信された後にCookieコレクションを変更できないことを示す例外が発生します。
- ?
必死になって、私はSOの人々に目を向け、調査できるこの欠落したCookieのその他の考えられる原因を尋ねます。