javascript - CSRF 漏洞/cookie 问题

标签 javascript cookies security csrf session-cookies

只是想从认识的人那里得到意见。我正在考虑 CSRF 漏洞,以及我所知道的似乎最流行的对抗它的方法。该方法是在返回的 html 中创建一个 token ,并添加一个具有相同值的 cookie。因此,如果脚本尝试发帖,他们将必须猜测网页中嵌入的 token 才能成功。

但如果他们针对特定网站,为什么他们不能只使用一个脚本

  1. 在页面上调用 get(即使脚本无法访问它也会返回 cookie)
  2. 解析html并获取token
  3. 调用其中包含该 token 的帖子(返回的 cookie 将被发回)
  4. 他们在用户不知情的情况下成功提交了表单

脚本不需要知道 cookie 的内容,它只是利用 cookie 一直来回发送这一事实。

我在这里错过了什么?这不可能吗?如果您考虑一下,我认为这非常可怕。

此行以下不需要阅读来回答问题:)

此漏洞基于身份验证是基于 cookie 完成的事实,我认为这是当前身份验证的主要方式。

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

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

但我确实明白,如果安全更重要,那么漂亮的 URL 就会排在第二位。

我对 cookie 不是很了解,但是如果用户代理对他们的 cookie 更加小心一点呢?

例如,如果发送的 cookie 取决于选项卡怎么办?我们现在都使用标签冲浪,对吧?那么如果 cookie 的范围是选项卡呢?因此,如果我在选项卡 1 上打开我的银行网站并在选项卡 2 上冲浪,则任何调用 gets/posts 的脚本 选项卡 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。

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

最佳答案

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

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

关于javascript - CSRF 漏洞/cookie 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3110353/

相关文章:

javascript - 背面可见性在 safari 中不起作用

node.js - 无法运行 node-redis-session 库

javascript - 密码存储在谷歌浏览器的浏览器内存中

security - .NET Web 应用程序的应用程序安全审计?

javascript - 自动为 TinyMCE 插入的标题生成 id

javascript - 使用 angular-ui-ace 时看不到 ace 编辑器

cookies - jmeter 不会跨线程组保留 cookie

asp.net - 自定义主体在新请求时恢复为 GenericPrincipal

javascript - 添加/删除按钮不适用于重复的表单字段 - jquery

javascript - 如何在回发时保持 SlideToggle 的状态?