基本 cookie 和 CSRF 问题

Posted

技术标签:

【中文标题】基本 cookie 和 CSRF 问题【英文标题】:Basic cookie & CSRF question 【发布时间】:2011-08-10 16:12:39 【问题描述】:

我目前正在学习有关 CSRF 的更多信息,并且我有一个关于 cookie 的基本问题。来自Jeff Atwood's article on CSRF:

"当一个 POST 请求被发送到 网站,请求应该只 如果表单值和 cookie 值是相同的。当一个 攻击者代表 a 提交表单 用户,他只能修改 表格。攻击者无法读取任何 从服务器发送的数据或修改 cookie 值,同源 政策。这意味着虽然一个 攻击者可以发送他想要的任何值 有了表格,他将无法 修改或读取存储在 饼干。”

如果cookies是a piece of text stored on a users computer,他们怎么能不修改/读取cookie的值

如果他们知道 cookie 的值并且可以看到隐藏在表单中的伪随机值,他们难道不具备执行攻击所需的一切吗?

谢谢,

【问题讨论】:

【参考方案1】:

同源策略意味着攻击的网站无法从其他域读取 cookie。见http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_cookies

我们不是在谈论在用户计算机上拥有 rootkit 或类似东西的攻击者,CSRF 所保护的是恶意服务器让用户通过 POST 请求向恶意服务器的域提交表单想要攻击。由于恶意服务器无法从目标域读取 cookie,因此它们无法正确填写其发出的 POST 请求的 CSRF 字段。

【讨论】:

【参考方案2】:

这里指的是同步器令牌模式。它通常意味着一个表单包含一个隐藏字段,该字段的值对于该用户的会话是唯一的。相同的值存储在用户机器的 cookie 中。提交表单时,会检查两个值是否匹配。

这种方法的优点是,如果恶意网站尝试向合法网站构建发布请求,它不会知道隐藏的表单值。获得这个完全是一个更复杂的过程。

攻击站点无法读取或操作 cookie 值,因为它是从另一个域发出的。更多关于这个(包括一个工作的例子)在这里:OWASP Top 10 for .NET developers part 5: Cross-Site Request Forgery (CSRF)

【讨论】:

他们可以通过查看页面源来获取隐藏的表单值...我不明白 是的,但这与 CSRF 完全不同的攻击向量,它只是颠覆性地请求诸如 mysite.com/TransferMoney.aspx?Amount=5000"> 之类的 URL(或使用中间帖子来构造 POST 请求) .看看 CSRF 上的 OWASP 页面,它更深入地解释了它:owasp.org/index.php/…

以上是关于基本 cookie 和 CSRF 问题的主要内容,如果未能解决你的问题,请参考以下文章

CSRF 跨域

Django(DRF)和React - 禁止(未设置CSRF cookie)

对xss攻击和csrf攻击的理解

微信小程序和具有权限认证CSRF机制的Django服务端交流

XSS与CSRF有啥区别吗?

技术干货 | XSS攻击与CSRF攻击的定义及区别