我知道我错过了什么,但请帮助我理解。考虑这种情况: 我有一个名为goodbank.com的网站。网址http://goodbank.com/transfer/在GET上提供HTML页面,其中包含用于将资金转帐到其他帐户的表单。该表单具有随机令牌以防止CSRF攻击。在服务器上,在POST上检查令牌有效性,相应的控制器仅允许经过身份验证的会话。
假设我在浏览器中登录goodbank.com/。在另一个标签中,我去robgoodbank.com。作为服务页面的一部分,它有javascript向goodbank.com/transfer/做AJAX请求以获得有效表单。然后它填写表单中的其他字段并执行POST。我的帐户已清理完毕:(
现有的保护方案如何防范此类攻击?
提前致谢。
答案 0 :(得分:1)
除非您的服务器允许Cross Origin Resource Sharing,否则浏览器将拒绝XMLHttpRequest
。根据链接,XMLHttpRequest
发送包含请求所源自的域的Origin
标头。如果服务器未响应包含该域通配符的Access-Control-Allow-Origin
,则浏览器将拒绝该请求。实际上有许多Access-Control-
标头来控制访问,包括允许的方法等。
为了获得额外的保护,您的服务器应检查Origin
是否存在以及Referer
HTTP标头,在您的示例中为“http://robgoodbank.com”,您也可以拒绝请求。
这些绝不是万无一失的,但确实提供了额外的保护层。有一些机制(例如扩展)来欺骗Referer,但是除非他们的浏览器以某种方式被破坏,否则这些机制会被用户使用。如果他们的浏览器遭到入侵,他们会遇到更多麻烦......