2

私のASP.NETMVCアプリケーションは、ValidateAntiForgeryToken属性を使用し、Html.AntiForgeryTokenを呼び出して、トークン値を使用して非表示の入力要素を書き込み、トークンをCookieに配置することで、CSRF攻撃を防ぎます。

私の例外ログは、有効なリクエストからトリガーされたように見えるHttpAntiForgeryExceptionの発生を報告しています(リファラーは正しいように見えます)。例外の原因となった応答には、フォームフィールドにトークン値とともに__RequestValidationTokenも含まれています。ただし、必要なCookieがリクエストから欠落しているため、検証が失敗し、例外がスローされます。

私はこのCookieが欠落している理由を考えようとしており、次の考えられる理由を考え出しました。

  1. ドメインのCookieコレクションがいっぱいです。-これがここに当てはまる場合、各リクエストで20/50のCookieが表示されると予想され(ところで、すべてのユーザーエージェントはIE7とIE8です)、どういうわけかCookieが削除されています。例外のさまざまな発生で3〜23個のCookieが表示されます
  2. Cookieのデータ制限に達しました。-これは起こっていません。ログを見ると、cookieコレクションが少ないことがわかります。
  3. Cookieを追加する前に、応答が返送されています。-これについてはよくわかりません。ヘッドでReponse.Flushを手動で呼び出すと、応答が送信された後にCookieコレクションを変更できないことを示す例外が発生します。

必死になって、私はSOの人々に目を向け、調査できるこの欠落したCookieのその他の考えられる原因を尋ねます。

4

2 に答える 2

6

私はまったく同じ問題を抱えていました。私のコンテンツは、クロス ドメインの iframe を介して表示されていました。Adam Youngによると、ヘッダーで P3P ポリシーを定義しない限り、IE はサードパーティの Cookie を自動的にブロックします。

p3p ポリシーをヘッダーに挿入するコードを追加し、iframe で使用する各アクションから呼び出すだけです。これまでのところ、このエラーが発生することはありません。この解決策が他の人に役立つことを願っています。

public static void SetP3PCompactPolicy()
{
    HttpContext.Current.Response.AddHeader("p3p", 
    "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
}

必要かどうかはわかりませんが、 machine keyも定義しました。

于 2011-04-08T13:32:26.533 に答える