CSRF漏洞/ cookie问题

时间:2010-06-24 13:28:23

标签: javascript cookies security csrf session-cookies

只想获得知情人士的意见。我正在考虑CSRF的漏洞,以及我所知道的最常见的反对它的方法。该方法是在返回的html中创建一个令牌,并添加一个具有相同值的cookie。因此,如果脚本尝试发布帖子,他们将have to guess the token thats embedded in the web page以使其成功。

但如果他们定位到特定网站,为什么他们不能只使用

的脚本
  1. 调用页面上的get(即使脚本无法访问,也会返回cookie)
  2. 解析html并获取令牌
  3. 在其中调用带有该令牌的帖子(将返回的cookie将被发回)
  4. 他们已经成功提交了一份没有用户知识的表格
  5. 脚本不需要知道cookie的内容,只是使用cookie一直来回发送的事实。

    我在这里缺少什么?这不可能吗?我认为,如果你考虑一下,这是非常可怕的。

    在此行下方无需阅读以回答问题:)

    此漏洞存在以下事实:身份验证是基于Cookie完成的,我认为这是当前身份验证的主要方式。

    我能想到的另一个解决方案是在页面级别进行身份验证。所以 当他们登录返回的html时,会有令牌。他们单击的每个链接都包含该令牌,因此当Web服务器获取请求时,它可以识别用户/会话。它的问题在于,如果他们使用除了它之外的任何导航它们将是“未经验证的”(例如输入网址),它在网址中也看起来不太好,因为它可能看起来像这样:

    https://www.example.com/SuperSecretPage/1/123j4123jh12pf12g3g4j2h3g4b2k3jh4h5g55j3h3

    但我确实理解如果安全性更重要,那么漂亮的URL就是第二位。

    我不知道关于cookie的一切,但如果用户代理对他们的cookie更加小心呢?

    例如,如果发送的cookie取决于选项卡,该怎么办?我们现在都在使用标签冲浪,对吧?那么如果cookie的范围是标签呢?所以,如果我在标签1上打开我的银行网站,并且我在标签2上浏览,那么任何调用获取/发布的脚本 选项卡2仅发送选项卡2中产生的cookie。

    或者如果存储了cookie /域。因此,当我在example.com上时,任何返回的cookie都会进入example.com cookie集合。然后当我在www.mybankingsite.com上时,所有的cookie都被放入mybankingsite.com集合中。因此,如果我访问example.com并运行调用get / post的脚本,则用户代理将仅发送example.com cookie。这与发送请求域的cookie不同。例如。如果脚本在example.com的网页中调用了mybankingsite.com,则用户代理将不会发送mybankingsite.com cookie。

    我知道我无法控制用户代理的工作,但我只是在探索可能性

3 个答案:

答案 0 :(得分:4)

所以我认为这里的问题就是攻击者尝试获取页面内容。要获取经过身份验证的用户页面,攻击者需要能够代表他们发送请求读取内容。 AJAX不会发送跨域请求,iframe不会让您读取响应。我正在努力想到攻击者首先获取内容的其他方式。

更有可能的是,正在使用clickjacking让用户提交表单。这种技术似乎不太可能。 (告诫:这是安全,我们总是错的。)

答案 1 :(得分:2)

有人关心在这个问题上分享一些代码,因为我刚用CSRF攻击了我自己的网站(不在生产​​中)。我所要做的就是以下

在:www.badguy.com/上写下以下的html

img src =“www.goodguy.com/secure/user/delete/5”>

这是做什么 所以管理员去www.badguy.com/并且图像发出请求 来自用户浏览器的www.goodguy.com/secure/user/delete/5因此管理员在不知不觉中刚刚删除了一个用户。如果你创建一个循环你有点麻烦。期待我永远不会删除数据只是改变它的状态:)但我仍然不喜欢它的外观。

答案 2 :(得分:1)

每个会话的CSRF令牌必须是唯一的。如果恶意服务器请求同一页面,他们将获得不同的令牌。如果他们尝试通过客户端计算机上的JavaScript请求页面内容,则同源策略将阻止它们。