【发布时间】:2012-07-24 13:39:06
【问题描述】:
搜索 CSRF 预防技术中最常见的解决方案是 MVCAntiForgeryToken(MVC 3 附带)实现的,其中服务器的客户端必须在 POST 正文中发布验证令牌。在服务器端,它将根据 Cookie 中存在的令牌进行验证。
在自定义标头中发送验证令牌,并在服务器端验证自定义令牌的值与 cookie 中存在的值是否同样安全?
【问题讨论】:
-
马上,我想不出有什么理由不这样做。
搜索 CSRF 预防技术中最常见的解决方案是 MVCAntiForgeryToken(MVC 3 附带)实现的,其中服务器的客户端必须在 POST 正文中发布验证令牌。在服务器端,它将根据 Cookie 中存在的令牌进行验证。
在自定义标头中发送验证令牌,并在服务器端验证自定义令牌的值与 cookie 中存在的值是否同样安全?
【问题讨论】:
它更加安全 :) 因为即使攻击者可以获得当前交易的有效 csrf 令牌,他也必须发起跨域 ajax 请求以在请求中包含自定义标头。如果用户在他的浏览器中禁用了 js,那么攻击者就会被敬酒 :)。然而,它可以被 java 小程序覆盖......但你知道如果用户没有受过教育并且攻击者真的有动机,那么你可以做的很少;)。
但存在一个问题,如果用户通过防火墙或公司代理访问我们,并非所有自定义标头都会被转发。所以我认为这是使用字段而不是自定义标题的主要原因。虽然有一个防止 XSRF 攻击的标头:Origin,The web origin concept 也作为附加信息Content Security Policy 1.1 这只是一个草稿,但那里提出了一些有趣的想法。
【讨论】: