MVC3 远程验证和 AntiForgeryToken

Jay*_*neT 4 xss asp.net-mvc attributes antiforgerytoken asp.net-mvc-3

在阅读了 XSS 攻击之后,我使用本文中描述的 ValidateAntiForgeryTokenWrapperAttribute 将 AntiForgeryToken 应用于我的网站:

http://weblogs.asp.net/dixin/archive/2010/05/22/anti-forgery-request-recipes-for-asp-net-mvc-and-ajax.aspx

它似乎运行良好,但是我在 MVC3 中使用远程验证时遇到了一个问题。我有一个 ValidationController,它包含我站点内的所有常见验证,如果我将 ValidateAntiForgeryTokenWrapperAttribute 应用到它,那么远程验证不再有效,我得到一个“所需的防伪令牌未提供或无效。” 异常记录在 Elmah 中。我试过调试这个,在抛出异常之前它甚至没有命中控制器动作。我认为这是因为远程验证不知道将 AntiForgeryToken 传递给控制器​​ - 有没有其他人遇到过这个问题,或者知道这两者是否不打算一起使用?

这也让我怀疑我是否应该在每个控制器上使用 ValidateAntiForgeryTokenWrapperAttribute,有什么想法吗?

小智 5

在远程属性中执行以下操作:

[Remote("MyValidationMethod","MyController", HttpMethod = "POST", AdditionalFields = "__RequestVerificationToken")]
public object MyField { get; set; }
Run Code Online (Sandbox Code Playgroud)

AdditionalFields 属性可以接受表单中逗号分隔的字段名称;__RequestVerificationToken 是包含 AntiForgeryToken 的隐藏字段的名称。