1

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

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

4

2 回答 2

1

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

于 2010-01-07T06:25:56.273 回答
0

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

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

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

于 2010-10-21T14:52:42.307 回答