2016-06-01 171 views
5

我对网络安全非常陌生,当我阅读更多有关不同攻击媒介的信息时,我的想法很容易让他们首先被允许。这就像网络被设计成具有破坏性的安全模式并且容易受到攻击。为什么浏览器允许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

+0

很多东西都会打破。例如所有这些分析和广告脚本。 – Thilo

+0

从第一天开始,浏览器就不是设计成允许* CSRF发生的。稍后,CSRF被发现*,此时已经有很多网站已经存在。绝对超过十个。事后更改规则,并期望每个网站改变,以适应规则的变化,预计很多 - 尤其是当一大堆*跨站点请求可能有*无*有害影响,只有理想的。 –

+0

这是有点不相干。网站负责保护自己,而不是依赖“正确”设计/开发/维护的浏览器。这就是为什么CSRF令牌(即使是kludgy)是必要的。我建议将CSRF构建到网站架构中(或使用已有的框架)。这样,它总是在那里,并总是检查(假设你正确地使用框架;) – LaJmOn

回答

4

我非常新的网络安全,并为我阅读更多关于 不同攻击媒介,我真不可思议,他们被允许在 首位。这就像网络设计的破坏性安全 模型,并容易受到攻击。

所有真实的。它从来没有被设计成首先是安全的。该网站最初设计为一个静态文档管理和共享系统,该系统允许直接链接到不同机器上的资源。

你今天看到的动态网页是一个杂牌。我们可以通过CSRF令牌,HTTP头等来解决这个问题,但是如果你在没有做这些事情的情况下建立一个动态网站,那么它很可能会变得脆弱(并且让像我这样的人能够工作)。

结帐its history in the Wikipedia article

我也很惊讶于模糊和不准确的信息量。例如,对于 的例子,起初单一原产地政策听起来不错,然后我 认为它只适用于XHR,哦,顺便说一句,并不是 实际上阻止XHR交叉来源POST,这是传统的CSRF 攻击。很高兴我一直在阅读。

也主要是真的。同源策略也适用于窗口和框架(例如,如果exam​​ple.com包含iframe的iframe,example.com不能通过JavaScript更改example.org的内容)。是的,可以创建跨域XHR,但如果未启用CORS,则无法读取响应。这确实可以保护CSRF令牌不被盗用,但正如你所说,如果你不使用CSRF保护,那么就会出现CSRF漏洞。

其他防御措施(如adding a custom header)可用于缓解CSRF,因为自定义标头无法跨域发送。

XHRs以前不能访问任何跨域的内容,这被认为是太大的限制,因此CORS的出现。以前,无论如何,表单可以访问不同的域名,因此不被视为特别危险的操作。只要适当的控制措施到位,它仍然不是。

还有服务器可以使用,以确保 请求从正确的地方来了一个Origin标 - 但哎呀,它是跨浏览器设置 不一致,如果没有设置,你不能是 相当肯定,如果这是因为一个同源请求,或请求 类型,只是没有得到它的某些浏览器(可能是一个IMG标签?)。 继续阅读。

确实如此。请参阅this answer

为什么将浏览器会话cookie在 从一个网页,是不是cookie的由来起源的请求?

因为很多事情会以其他方式破坏。有无数的表单被设计为从静态网站提交到进行后端处理的动态网站。

有一个新的standard for "same-site" cookies。一个不太干燥的解释是here

基本上cookie可以设置一个新的属性SameSite。在strict模式下,当原点不同时不发送cookie。在lax模式中,只有在方法是例如POST,这是CSRF漏洞主要存在的地方。

你链接到的是早期的草稿。

+0

“有无数的表单被设计为从静态网站提交到进行后端处理的动态网站” - 但跨域?如果是这样,他们只是假设一个cookie已被另一个窗口设置到目标站点?我试图想到这样的例子,并找不到任何。 SameSite cookie听起来很有趣,希望它很快成为标准。 – aaa90210

+0

联合单点登录是有时会在每个会话中创建一个随机数的一个示例,可以在将流重定向回站点时进行验证。例如网站 - >设置Cookie - >重定向到OpenID提供商 - >身份验证 - >重定向返回声明 - >站点检查随机cookie和声明。 – SilverlightFox