0

DevExpress グリッドを使用する既存の MVC4 Web アプリケーションを CSRF 保護しようとしています。aspx ページ (グリッドを含むパーシャルとして ascx を含む) のフォームに Html.AntiForgeryToken() を追加し、保存が呼び出されたときに開発者ツールで __RequestVerificationToken とその値を明確に確認できます。

ValidateAntiForgeryToken のすべての属性をバー 1 からコメントアウトしようとしました - 簡単にするために delete post メソッドを使用しました (また、DevExpress グリッドの混乱を排除するため)、このエラーに遭遇し続けます:

HttpAntiForgeryException がありました

URL: http://localhost:54653/Users/Delete/f86ad393-0039-44e8-beed-a66dbab9266e?ReturnURL=http%3A%2F%2Flocalhost%3A54653%2FUsers

例外メッセージは、必要な偽造防止フォーム フィールド "__RequestVerificationToken" が存在しません。

なぜこれが起こっているのか誰にも分かりますか?エラーは説明的ではなく、実際にはトークンが存在しないのではなく、一致しないのでしょうか? この質問に対する以前の回答では、「ああ、トークンを追加する必要があります」と言うだけでしたが、これは明らかにここでは役に立ちません。

4

4 に答える 4

1

Ajax を介して手動でフォームを送信していますか? その場合は、偽造防止トークンを「__RequestVerificationToken」という名前の別のパラメーターとして渡す必要があります。

于 2016-07-29T06:53:53.707 に答える
0

ポイント 1 : アプリケーションに https セキュア プロトコルがあるかどうかを確認します。httpsで読み込んでください。

ポイント 2 : DevExpress の場合、以下のパターンで呼び出す必要があります。

ViewContext.Writer.Write(Html.AntiForgeryToken().ToHtmlString());

于 2016-07-29T06:59:10.887 に答える
0

ではない正確に。MvcxGridView を使用しているページで MVC AntiForgeryToken が既に定義されており、グリッド アクションを保護する必要がある場合は、グリッド クライアント側開始コールバック イベント中にこのトークンをサーバーに送り返す必要があります。

    settings.ClientSideEvents.BeginCallback = "function(s,e) { e.customArgs[\"__RequestVerificationToken\"] = $('input[name=\"__RequestVerificationToken\"]',  $(s.GetMainElement())).val(); }";
于 2016-08-08T12:36:44.167 に答える