所以我在 nginx 的 http 级别有这些压缩指令:
gzip on;
gzip_http_version 1.1;
gzip_vary on;
我读到应该避免这种情况,因为 CRIME/BREACH 攻击,这是正确的吗?
所以我在 nginx 的 http 级别有这些压缩指令:
gzip on;
gzip_http_version 1.1;
gzip_vary on;
我读到应该避免这种情况,因为 CRIME/BREACH 攻击,这是正确的吗?
我读到应该避免这种情况,因为 CRIME/BREACH 攻击,这是正确的吗?
这取决于。
CRIME 攻击已经在当前浏览器中得到缓解,因为它们不使用 TLS 压缩并且在 HTTP/2.0 中对上下文进行了特殊处理。如果以下两个条件同时适用(引用http://www.breachattack.com/),则 BREACH 仅在 HTTP 级别压缩的上下文中相关:
如果这些都不适用或只有其中一种适用,您可以使用 gzip 而不会受到 BREACH 的影响。这意味着您可以安全地将其用于任何静态页面或任何不包含诸如 CSRF 令牌之类的机密(这是攻击者想要提取的机密)的页面。
此外,攻击者需要对同一站点的多个请求,并且必须能够查看传输数据的大小如何变化。因此,如果您的秘密一直在变化,或者如果站点发生变化(例如添加具有随机大小的随机填充),攻击者将无法使用 BREACH。另请参阅防御 BREACH 攻击。
gzip 压缩 SSL 加密的数据在一定程度上消除了 SSL 的优势。是的,压缩所有内容可能会使您的网站面临 BREACH 漏洞。
但是您仍然可以为 gzipping 添加一些资源。例如,公共图像通常可以被压缩或公共文档。但是,您应该仔细考虑是否要“破坏”您自己的 SSL 保护。
编辑:我想补充一点,使用 SPDY,您可以通过压缩标头和缩短的密钥协商/重新协商来实现类似的压缩。您也可以“预”压缩经常使用的资源(但这不是 SPDY 独有的)。
SSL/TLS 和 Gzipping 的工作原理是它映射数据以以可预测和可重复的方式减少数据包的大小,然后可以撤消。如果页面是静态的并且没有随它们一起发送的令牌或 cookie,这不是问题。这是因为从站点请求的数据将始终相同,因此数据包大小不会改变。但是对于动态页面,除了 CSRF 和用户数据中的一点点内容外,内容总是会发生变化。使用该信息,他们可以将数据注入请求或正文中。这是一个问题,因为它允许他们更改数据包的内容并查看压缩映射的方式。 他们最终可以访问数据包中的某些内容,包括 cookie、任何密码或用户信息、跨站点请求伪造令牌以及发送的任何其他内容。
因此,不建议使用 TLS/SSL 对敏感数据进行动态数据压缩,因为最终可能会破坏数据包。