2011-03-08 83 views
7

我创建了一个页面,可以在不刷新页面的情况下创建多个AJAX表单文章。ASP.NET MVC HTML.AntiForgeryToken()与来自一个页面的多个AJAX请求

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

回答

7

您可以共享相同的标记。当然,作为一般规则,强烈建议将您的Ajax调用包装为一个统一的方法,将CSRF令牌与请求连接起来(不管是GET还是POST,尽管从架构的角度来看POST更安全并且更加正确),所以当你使Ajax调用只关注业务输入值,而不需要担心CSRF。

编辑:阅读这个不错的职位&样品自动包装阿贾克斯使用jQuery 1.5 CSRF保护起来:http://www.codethinked.com/aspnet-mvc-ajax-csrf-protection-with-jquery-15

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)标记为ValidateAntiForgeryToken属性,则可以通过比较它们来检测CRSF攻击。现在,重要的是应该为每个请求创建新的令牌。因此,当你做AJAX表单发布时,cookie将被设置为新的标记值,并且你必须确保AJAX响应包含新的标记字段,并在浏览器端进行更新。我也会建议你使用不同的盐来保护不同的形式。

相关问题