首页 文章

Don 't understand how Django' s CSRF保护工作

提问于
浏览
0

阅读这个section of the Django docs,他们建议在cookie中设置一个csrftoken,然后让客户端框架将它放在一个 Headers 中,该 Headers 将在服务器端请求中进行验证 . 但是,还没有要求吗?

或者这里的“安全性”是Django在标头中检查该值而不是检查cookie值本身?

我确实理解为什么这适用于同步提交,但在这种情况下,csrftoken直接写入页面而不是存储在cookie中,这似乎更安全 .

来自OWASP page on reviewing code for CSRF

检查请求是否具有有效的会话cookie是不够的,我们需要检查是否与发送到应用程序的每个HTTP请求一起发送唯一标识符 . CSRF请求不具有此有效唯一标识符 . CSRF请求不具有此唯一请求标识符的原因是,唯一ID在页面上呈现为隐藏字段,并且在选择链接/按钮按下后附加到HTTP请求 . 攻击者不会知道这个唯一ID,因为它是随机的,每页链接动态呈现 .

2 回答

  • 3

    你误解了一些事情 .

    令牌始终在cookie中;你链接到的代码是为了让它从你的JS中的cookie中取出,以便你可以发送回来 .

    而且,正如您的报价所显示的那样,试图从不在网站上的网页发帖的攻击者将不会拥有该cookie,因此无法将正确的值注入表单或 Headers 中 .

  • 0

    我不熟悉django csrf保护,但我认为它的工作方式与其他框架中的其他csrf保护一样 .

    诀窍是,通过cookie和客户端使用标头将csrf令牌发送到客户端,将其发送回服务器 . 服务器忽略cookie,但不忽略标头 . 它如何防止csrf攻击?例如,攻击者可以绑定 <img src="yourwebsite.com/action/destroy/data"> (或通过javascript发送post请求) . 您的浏览器随之发送csrf cookie(以及会话cookie) . 因为标头丢失 - 防止了攻击 .

    与表格相同 . 我认为两者, Headers 和表格都是平等安全的 .

    但是在这两种情况下,如果你有xss漏洞,你就输了 .

    编辑:正如Daniel指出的那样,删除csrf cookie是有意义的 . 但这不是出于安全原因 .

相关问题