【问题标题】:CSRF, Token and Same-Origin Policy explainedCSRF、令牌和同源策略解释
【发布时间】:2013-11-20 18:50:50
【问题描述】:

所以我知道有很多关于 CSRF 的问题(因为我已经阅读了其中一些),但有一点我仍然不明白。让我们想象以下情况:

  1. 我在我的服务器上登录(使用 cookie),其中有一个带有“删除我的帐户”按钮的页面。我不想按。

  2. 我访问了一个黑客的服务器:

    一个。我的浏览器请求“bad.html”,其中包含 JS,并定义了回调函数。它还有一个类似的脚本:(从而避免了同源策略问题)

    var s = document.createElement('script'); 
        s.src = 'url to "deleteAccountPage" of my server?'
        s.src += 'callback=hackerCallback'; 
        s.type = 'text/javascript';
    document.body.appendChild(s);
    

    b.脚本被“附加”,浏览器将加载页面,然后调用hackerCallback,将页面HTML文本作为参数传递。

    c。有了这个 HTML,回调就可以解析其中的令牌。

  3. hackerCallback 现在拥有令牌,在“deleteMyAccount”页面上向我的服务器发送 Ajax 请求。

  4. 我的帐户现在已被删除,因为令牌、cookie 甚至浏览器跟踪都与服务器注册的匹配。

你如何避免这种行为?我已经阅读了有关仅在我的服务器上允许某些标头的内容。这将缩短我服务器上的所有跨域请求,但是根据此链接 (http://blog.alexmaccaw.com/jswebapps-csrf) 这还不够......(我完全相信)

感谢您的帮助 塞巴-1511

【问题讨论】:

  • 你有想过这个吗?你能解释一下callback=hackerCallback吗?期望删除页面与“回调”查询字符串参数有什么关系?当然,删除页面不应该只执行通过 uri 传入的任何 javascript。
  • 不,还没有弄清楚。 callback=hackerCallback 指定将响应返回给用户后将调用的函数。 (它将由浏览器执行,而不是服务器执行)这使得黑客可以解析从原始服务器返回的页面,从而获得正确的令牌以绕过CSRF安全机制。
  • 您能提供带有域的示例吗?例如s.src = "http://www.example.com/deleteAccountPage.html?" http://www.evil.com/bad.html 看起来hackerCallbackevil.com 上的一个JS 函数,对吗?

标签: cookies token csrf same-origin-policy


【解决方案1】:

您使用 JSONP 是为了通过 scr 标签发出跨域请求。 JSONP 仅允许用于 GET 请求,并且您不应使用 GET 端点进行更改(非幂等)。

deleteAccount 应该是无法通过 JSONP 请求的 POST 端点。

如果您坚持在 deleteAccount 上使用 GET,您应该使用 CSRF 令牌或在标头而不是 cookie 中发送令牌(如果您使用 XHR 请求)

【讨论】:

  • 感谢您的评论。 JSONP 用于获取令牌,而不是删除帐户。因此我们想做一个 GET 请求。可以使用跨域 POST 请求在第 3 步中完成删除。
  • 您正在附加类似
猜你喜欢
  • 2017-03-23
  • 1970-01-01
  • 2017-12-09
  • 2012-08-22
  • 2014-07-26
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
相关资源
最近更新 更多