MVC 2中的csrf和反伪造令牌,不想验证ajax帖子

时间:2012-03-26 09:18:23

标签: asp.net-mvc asp.net-mvc-2 csrf

我想使用ValidateAntiForgeryToken但是......我只想在动作上使用它 我经常发帖。而不是与json的ajax。因为跨域限制会定期阻止攻击者。我的问题是这样的:

如果我有一个动作我知道我只在AJAX中发布JSON并且在这种情况下antiforgerytoken不起作用,所以我想确保请求真的是一个ajax请求,这意味着它真的来自我的网站,我怎么能在ASP.Net MVC 2中做到这一点?

所以我的一般想法是:将ValidateAntiForgeryToken属性放在所有具有常规帖子的操作上。并确认帖子确实是所有其他活动中的ajax帖子

那么如何确保某个动作的帖子真的是AJAX而不仅仅是常规帖子呢?

感谢

1 个答案:

答案 0 :(得分:0)

您必须编写自己的ValidateAntiForgeryTokenAttribute。

我只需要获取现有属性的源代码并将其复制到您的won类中然后修改它,以便OnAuthorization方法检查" filterContext.RequestContext.HttpContext.Request.IsAjaxRequest"并且仅在错误的情况下执行CSRF验证。

您还可以轻松地将CSRF令牌附加到您的AJAX请求中,我认为这将是您问题的更好解决方案