我对网络安全非常陌生,当我阅读更多有关不同攻击媒介的信息时,我的想法很容易让他们首先被允许。这就像网络被设计成具有破坏性的安全模式并且容易受到攻击。为什么浏览器允许CSRF?
我也很惊讶于模糊和不准确的信息量。例如,起初单原产地政策听起来不错,然后我读到它只适用于XHR,哦顺便说一句,实际上并没有阻止XHR交叉源POST,这是传统的CSRF攻击。很高兴我一直在阅读。
还有一个Origin头文件,服务器可以使用它来确保请求来自正确的位置 - 但是oops,它在不同浏览器中设置不一致,如果未设置,则不能相当肯定,如果这是因为一个相同的来源请求,或者只是没有得到它的某些浏览器(可能是一个IMG标签?)的请求类型。继续阅读。
所以权利似乎是在会话cookie中设置一个CSRF令牌,并将该令牌添加到窗体/链接,然后在提交时将它们与服务器端进行比较。在理论上(并且为了这个问题可以排除所有XSS攻击),另一个选项卡的CSRF尝试可能会向包含该cookie的表单发出POST请求,但没有将表单输入元素设置为匹配的令牌(因为它无法从cookie中读取令牌),因此服务器将拒绝该请求。工作但kludgy,并确保你永远不会忘记检查!
为了保持这一想法在第二秒,这里是我的问题 - 为什么浏览器发送会话cookie在一个请求中发出的页面不是来源的cookie?
我的意思是,浏览器将拒绝发送cookie 到不同的领域有很好的理由,但很乐意从不同来源给他们?如果他们不这样做会破坏吗?它是否会成为CSRF的强大防御,只需要服务器去做他们正在做的事情 - 检查有效的会话cookie?
编辑:也许这是一个尝试改善情况? https://tools.ietf.org/html/draft-west-origin-cookies-01
很多东西都会打破。例如所有这些分析和广告脚本。 – Thilo
从第一天开始,浏览器就不是设计成允许* CSRF发生的。稍后,CSRF被发现*,此时已经有很多网站已经存在。绝对超过十个。事后更改规则,并期望每个网站改变,以适应规则的变化,预计很多 - 尤其是当一大堆*跨站点请求可能有*无*有害影响,只有理想的。 –
这是有点不相干。网站负责保护自己,而不是依赖“正确”设计/开发/维护的浏览器。这就是为什么CSRF令牌(即使是kludgy)是必要的。我建议将CSRF构建到网站架构中(或使用已有的框架)。这样,它总是在那里,并总是检查(假设你正确地使用框架;) – LaJmOn