7

我正在创建一个页面,该页面无需刷新页面即可制作多个 AJAX 表单帖子。

我想使用 ASP.NET MVCHTML.AntiForgeryToken()助手来保护表单免受 CSRF 攻击。我认为页面上的每个表单都可以共享相同的令牌,但它是否允许使用相同令牌的多个请求?如果没有,有没有办法获得新的令牌或其他方式来保护表格?

4

2 回答 2

8

您可以共享相同的令牌。当然,作为一般规则,强烈建议将 Ajax 调用包装在一个统一的方法中,该方法将 CSRF 令牌连接到请求(无论是 GET 还是 POST,尽管从架构的角度来看 POST 更安全、更正确),所以当你让 Ajax 调用只关注业务输入值,无需担心 CSRF。

编辑:阅读这篇不错的帖子和使用 jQuery 1.5 及更高版本进行 CSRF 保护的自动包装 Ajax 示例:http: //www.codethinked.com/aspnet-mvc-ajax-csrf-protection-with-jquery-15

于 2011-03-10T14:00:09.380 回答
1

我会建议阅读这些文章:

http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

http://msmvps.com/blogs/luisabreu/archive/2009/02/09/the-mvc-platform-the-new-anti-forgery-token.aspx

所以要回答你的问题 - 这将取决于你是如何做到的。当您使用AntiForgeryToken嵌入令牌时,它会在隐藏字段和 cookie 中生成(新)令牌。如果您使用属性标记了您的操作方法(对于 POST),则通过比较它们来检测 CRSF 攻击ValidateAntiForgeryToken。现在,为每个请求创建新令牌很重要。因此,当您执行 AJAX 表单发布时,cookie 将设置为新的令牌值,您必须确保 AJAX 响应包含新的令牌字段并在浏览器端更新它。我还建议您针对不同的形式使用不同的盐,以获得更好的保护。

于 2011-03-08T05:28:14.397 回答