我正在创建一个页面,该页面无需刷新页面即可制作多个 AJAX 表单帖子。
我想使用 ASP.NET MVCHTML.AntiForgeryToken()
助手来保护表单免受 CSRF 攻击。我认为页面上的每个表单都可以共享相同的令牌,但它是否允许使用相同令牌的多个请求?如果没有,有没有办法获得新的令牌或其他方式来保护表格?
我正在创建一个页面,该页面无需刷新页面即可制作多个 AJAX 表单帖子。
我想使用 ASP.NET MVCHTML.AntiForgeryToken()
助手来保护表单免受 CSRF 攻击。我认为页面上的每个表单都可以共享相同的令牌,但它是否允许使用相同令牌的多个请求?如果没有,有没有办法获得新的令牌或其他方式来保护表格?
您可以共享相同的令牌。当然,作为一般规则,强烈建议将 Ajax 调用包装在一个统一的方法中,该方法将 CSRF 令牌连接到请求(无论是 GET 还是 POST,尽管从架构的角度来看 POST 更安全、更正确),所以当你让 Ajax 调用只关注业务输入值,无需担心 CSRF。
编辑:阅读这篇不错的帖子和使用 jQuery 1.5 及更高版本进行 CSRF 保护的自动包装 Ajax 示例:http: //www.codethinked.com/aspnet-mvc-ajax-csrf-protection-with-jquery-15
我会建议阅读这些文章:
所以要回答你的问题 - 这将取决于你是如何做到的。当您使用AntiForgeryToken嵌入令牌时,它会在隐藏字段和 cookie 中生成(新)令牌。如果您使用属性标记了您的操作方法(对于 POST),则通过比较它们来检测 CRSF 攻击ValidateAntiForgeryToken
。现在,为每个请求创建新令牌很重要。因此,当您执行 AJAX 表单发布时,cookie 将设置为新的令牌值,您必须确保 AJAX 响应包含新的令牌字段并在浏览器端更新它。我还建议您针对不同的形式使用不同的盐,以获得更好的保护。