1

我知道我遗漏了一些东西,但请帮助我理解。考虑这种情况:我有一个名为 goodbank.com 的网站。URL http://goodbank.com/transfer/在 GET 上提供一个 HTML 页面,其中包含将资金转移到另一个帐户的表单。表单有一个随机令牌来防止 CSRF 攻击。在服务器上,在 POST 上检查令牌有效性,并且相应的控制器只允许经过身份验证的会话。

假设在我的浏览器中,我登录到 goodbank.com/。在另一个选项卡中,我访问了 robgoodbank.com。作为服务页面的一部分,它有 javascript 向 goodbank.com/transfer/ 发出 AJAX 请求以获取有效表单。然后它填写表单中的其他字段并执行 POST。我的帐户被清除了:(

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

提前致谢。

4

1 回答 1

1

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

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

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

于 2014-02-12T15:36:30.740 回答