我刚刚实现了一个使用ASP.NET MVC的例子,它使用ValidateAntiForgeryToken属性来防止CSRF攻击。
为了验证它,我制作了从另一个应用程序发出相同post请求所需的HTML片段。基本上,如果我将带有令牌加密值的隐藏字段添加到这个第三方应用程序中,我将得到一个成功的post request.So,如果我只通过检查原始表单的html源就可以看到隐藏的值,那么在ValidateAntiForgeryToken中就没有任何意义。有人能告诉我它的真正意义吗?
另一方面,基于前面示例的结果,我想知道在应用程序上具有有效凭据的恶意用户是否能够获得自己的令牌,并使用它代表其他用户发出post请求,并执行CSRF攻击?
发布于 2015-08-30 18:28:46
有人能告诉我它的真正意义吗?
除了CSRF攻击的潜在受害者之外,没有人能读取令牌。同一原产地政策阻止另一个站点从用户会话读取令牌。只要令牌是以安全方式生成的,并且是浏览器会话特有的,就不需要向令牌添加任何其他内容。
另一方面,基于前面示例的结果,我想知道在应用程序上具有有效凭据的恶意用户是否能够获得自己的令牌,并使用它代表其他用户发出post请求,并执行CSRF攻击?
每个用户会话的令牌应该是唯一的。如果Bob在evil.example.com上设置了CSRF攻击,并让Alice在登录到bank.example.org并发送自己的反CSRF令牌的同时访问他的站点,应用程序应该拒绝该令牌,因为它与Alice的会话不匹配。
(它还应该将其记录为安全事件。)
发布于 2015-08-30 13:25:18
是的,你的表演方式是有可能的。但是,您可以通过添加包含代理信息的其他隐藏/加密字段来扩展当前的防伪造令牌实现来扩展保护。
下面的示例让您了解如何创建自定义AntiForgery令牌
http://techbrij.com/angularjs-antiforgerytoken-asp-net-mvc
https://stackoverflow.com/questions/32294697
复制相似问题