CSRF令牌如何防止恶意GET,然后在另一个选项卡中进行POST

时间:2013-05-15 18:32:15

标签: csrf csrf-protection

我知道我错过了什么,但请帮助我理解。考虑这种情况: 我有一个名为goodbank.com的网站。网址http://goodbank.com/transfer/在GET上提供HTML页面,其中包含用于将资金转帐到其他帐户的表单。该表单具有随机令牌以防止CSRF攻击。在服务器上,在POST上检查令牌有效性,相应的控制器仅允许经过身份验证的会话。

假设我在浏览器中登录goodbank.com/。在另一个标签中,我去robgoodbank.com。作为服务页面的一部分,它有javascript向goodbank.com/transfer/做AJAX请求以获得有效表单。然后它填写表单中的其他字段并执行POST。我的帐户已清理完毕:(

现有的保护方案如何防范此类攻击?

提前致谢。

1 个答案:

答案 0 :(得分:1)

除非您的服务器允许Cross Origin Resource Sharing,否则浏览器将拒绝XMLHttpRequest。根据链接,XMLHttpRequest发送包含请求所源自的域的Origin标头。如果服务器未响应包含该域通配符的Access-Control-Allow-Origin,则浏览器将拒绝该请求。实际上有许多Access-Control-标头来控制访问,包括允许的方法等。

为了获得额外的保护,您的服务器应检查Origin是否存在以及Referer HTTP标头,在您的示例中为“http://robgoodbank.com”,您也可以拒绝请求。

这些绝不是万无一失的,但确实提供了额外的保护层。有一些机制(例如扩展)来欺骗Referer,但是除非他们的浏览器以某种方式被破坏,否则这些机制会被用户使用。如果他们的浏览器遭到入侵,他们会遇到更多麻烦......