如何缓解ASP.NET MVC Ajax.ActionLink请求的XSRF?

时间:2010-01-02 04:16:44

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

我的ASP.NET MVC(v1)页面上有许多Ajax.ActionLink来执行破坏性操作。这是“合法的”,因为在这种情况下我将HttpMethod设置为DELETE,因此它不是破坏性的GET

我的问题是如何减轻对此操作的XSRF攻击,以便其他站点无法制作相同的Ajax DELETE请求以从其他站点删除用户数据。此ActionLink确实出现在包含<%= Html.AntiForgeryToken() %>的表单中,但由于ActionLinks不发布表单,因此防伪标记不会发送到控制器,因此无法对其进行验证。

2 个答案:

答案 0 :(得分:1)

要防止跨站点请求伪造攻击,您必须阻止来自其他站点的请求。在asp.net中,您可以通过检查Request.UrlReferrer是否不是您的主机名来执行此操作。如果ajax请求来自不同的服务器,那么您应该忽略ajax请求。如果引用者为空,那么您也应该忽略该请求。

答案 1 :(得分:0)

此链接涵盖一个解决方案http://tpeczek.com/2010/05/using-antiforgerytoken-with-other-verbs.html

然而,最理想的解决方案是,当您使用actionlink时,它会将Anti Forgery令牌添加到查询字符串中,因此我将尝试编写自己的ActionLink扩展方法,将其附加到该上。

最后,我将编写一个继承自ValidateAntiForgeryTokenAttribute并在Request.Form和Request.QueryString中接受伪造令牌的属性