ASP.Net mvc中的CSRF和ValidateAntiForgeryToken?

时间:2015-08-30 08:30:28

标签: asp.net-mvc csrf antiforgerytoken

我刚刚使用ASP.NET MVC实现了一个示例,它使用[ValidateAntiForgeryToken]属性来防止CSRF攻击。

为了验证它,我制作了从另一个应用程序发出相同的帖子请求所需的HTML片段。基本上,如果我将带有令牌加密值的隐藏字段添加到此第三方应用程序,我会得到一个成功的帖子请求。所以我在[ValidateAntiForgeryToken]中找不到任何意义,如果我只是通过检查html可以看到隐藏的值原始形式的潜在来源。有人能给我一个关于它的真正意义的想法吗?

另一方面,根据前一个示例的结果,我想知道应用程序上具有有效凭据的恶意用户是否可以获得自己的令牌并使用它代表其他用户发布帖子请求,以及执行CSRF攻击,?

2 个答案:

答案 0 :(得分:1)

是的,你的表演方式是可能的。但是,您可以通过添加包含代理信息的其他隐藏/加密字段来扩展Anti-forgery Token的当前实现来扩展保护。

以下示例让您了解如何创建自定义AntiForgery令牌

http://techbrij.com/angularjs-antiforgerytoken-asp-net-mvc

答案 1 :(得分:0)

  

有人可以给我一个真正意义上的想法吗?

除了CSRF攻击的潜在受害者之外,没有人可以阅读该令牌。 Same Origin Policy阻止其他网站从用户的会话中读取令牌。只要令牌以安全的方式生成并且对于浏览器会话而言是唯一的,就不需要向令牌添加任何其他内容。

  

另一方面,根据我之前的例子的结果,我   想知道是否可以使用有效凭据的恶意用户   应用程序获取自己的令牌并使用它来发布帖子请求   代表其他用户,并执行CSRF攻击,?

每个用户会话的令牌应该是唯一的。如果Bob在evil.example.com上设置CSRF攻击并让Alice在登录bank.example.org并且发送自己的反CSRF令牌的同时访问他的站点,那么应用程序应拒绝该令牌,因为它与Alice的会话不符。

(它还应将此记录为安全事件。)