不理解django的CSRF保护是如何工作的
Don't understand how Django's CSRF protection works
阅读这部分Django文档,他们建议在cookie中设置一个csrftoken,然后让客户端框架将其放在一个头文件中,该头文件将在服务器端请求中进行验证。但是,在cookie中使用令牌不会破坏目的吗?因为cookie是根据每个用户的请求发送的。
或者这里的"安全"是Django在头文件中检查该值而不是检查cookie值本身?
我确实理解为什么这适用于同步提交,但在这种情况下,csrftoken直接写入页面而不是存储在cookie中,这似乎更安全。
来自OWASP关于审核CSRF代码的页面:
检查请求是否有一个有效的会话cookie是不够的,我们需要检查每个HTTP请求是否发送了唯一标识符到应用程序。CSRF请求不会有这个有效的惟一标识符。CSRF请求没有这个唯一请求的原因标识符是唯一的ID,呈现为页面上的隐藏字段并在链接/按钮按下后附加到HTTP请求中选中。攻击者将不知道这个唯一的ID,因为它是随机的,每个链接,每个页面动态呈现。
你误解了一些事情。
令牌总是在cookie中;你链接到的代码是用来把它从你的JS中的cookie中取出来,这样你就可以把它发送回来了。
关键是,正如你的引言所示,攻击者试图从不在网站上的页面发布将没有该cookie,因此将无法注入正确的值到表单或标题。
我不熟悉django csrf保护,但我认为它的工作原理与其他框架中的其他csrf保护类似。
诀窍是,通过cookie向客户端发送csrf令牌,客户端使用header将其发送回服务器。服务器忽略cookie,但不忽略header。如何防止csrf攻击?例如,攻击者可以绑定<img src="yourwebsite.com/action/destroy/data">
(或者通过javascript发送post请求)。浏览器会发送csrf cookie(以及会话cookie)。
表单也是一样。我认为头文件和表单同样安全。
但是在这两种情况下,如果你有xss漏洞,你就输了。
编辑:正如Daniel指出的,删除csrf cookie是有意义的。但这不是出于安全考虑。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- 在JavaScript中的类中,push和concat的工作方式有何不同
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)