'[ValidateAntiForgeryToken]'真正意味着什么?

时间:2013-09-10 14:54:35

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

首先,我仍然是MVC4的首发,在注意到许多动作都被[ValidateAntiForgeryToken]修饰后,我用Google搜索,但仍然有些混乱。

有人能用最简单的例子解释这个概念吗?

2 个答案:

答案 0 :(得分:17)

简单来说,它可以防止外部帖子请求。因此,没有人可以使用其他网站的方法。

工作原理。您在AntiForgeryToken视图中看到了Html.BeginForm

@using (Html.BeginForm()){

@Html.AntiForgeryToken()

//** fields of form

}

提交表单时,会将数据发送到Controller方法。如果方法具有ValidateAntiForgeryToken属性,则会验证您发送的数据是否具有ForgeryToken。

[ValidateAntiForgeryToken]
public ViewResult Update()
{
}

每次会话都会生成一次ForgeryToken。

答案 1 :(得分:6)

这里有很多关于AntiForgeryToken的信息:http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

这是为了防止跨站请求伪造(CSRF)。单击“保存”对表单进行汇总并在服务器上执行某些操作(即保存用户的详细信息)是非常标准的行为。您如何知道提交表单的用户是他们声称的用户?在大多数情况下,您会使用一些cookie或基于Windows的身份验证。

如果攻击者将您引诱到一个在隐藏的IFRAME中提交完全相同形式的网站,该怎么办?您的cookie完整提交,服务器看不到请求与合法请求有任何不同。 (正如gmail发现的那样:http://www.gnucitizen.org/blog/google-gmail-e-mail-hijack-technique/

防伪令牌通过在每次生成页面时创建额外的Cookie令牌来防止这种形式的攻击。令牌都在表单和cookie中,如果表单和cookie不匹配,我们会有CSRF攻击(因为攻击者无法使用上述攻击读取防伪令牌)。

从上面的文章中盐的作用是什么:

  

Salt只是一个任意字符串。不同的盐值意味着将生成不同的防伪标记。这意味着即使攻击者设法以某种方式获得有效令牌,他们也无法在需要不同盐值的应用程序的其他部分重用它。

如何生成令牌?下载source,看一下AntiForgeryDataSerializer,AntiForgeryData类。This has a duplicate.