在 Django >= 1.10 中使用 GZip 中间件是否安全?

Sco*_*les 7 security django django-middleware

我希望在 Django 中启用文本压缩。的性能的文档引用的GZip中间件作为文本压缩当前的解决方案。但是,它带有一个严厉的警告:

GZip中间件

压缩所有现代浏览器的响应,节省带宽和传输时间。请注意,GZipMiddleware 目前被认为是一种安全风险,并且容易受到使 TLS/SSL 提供的保护无效的攻击。有关更多信息,请参阅 GZipMiddleware 中的警告。

几个问题:

  • 是否有任何文本压缩的替代品,我可以使用Django的是没有受到安全隐患?
  • 如果我在使用时使用 CSRF 令牌POST并且启用了 CSRF 中间件,我是否安全?

再次,通过文档:

Django 1.10 中的更改:在旧版本中,Django 的 CSRF 保护机制在使用压缩时容易受到 BREACH 攻击。情况不再如此,但您仍应注意不要以这种方式泄露您自己的秘密。

Kev*_*nry 9

我绝对建议查看BREACH 论文,它简短而清晰。

正如那里所指出的:

为了使攻击成功,需要做几件事。要容易受到此侧信道的攻击,Web 应用程序必须:

  1. 从使用 HTTP 级压缩的服务器提供服务
  2. 在 HTTP 响应正文中反映用户输入
  3. 在 HTTP 响应正文中反映秘密(例如 CSRF 令牌)

因此,如果您没有在响应正文中反映用户信息和机密,那么您就不会受到攻击。

如果是,那么任何文本压缩方案都不太可能奏效。这种攻击利用了文本压缩的基本特性:重复的文本应该占用更少的空间。有可能存在不易受到攻击的压缩方案,但您肯定需要看到一些保证。

由于此攻击基于特定的应用程序功能,而不是框架漏洞,因此 Django 无法确保应用程序是“安全的”。Django可以做的是保护它提供支持的易受 BREACH 攻击的主要秘密:CSRF 令牌。从 1.10 版开始,Django 使用了论文中建议的一种缓解措施(参见第 3.4 节)来保护它免受这种攻击:

为了防止 BREACH 攻击,令牌不仅仅是秘密;一个随机的盐被预先添加到秘密并用来打乱它。

总结一下:如果您需要保护的唯一秘密是 Django 的 CSRF 令牌,并且您使用的是 Django 1.10 或更高版本,那么可以合理地得出结论,您可以使用 gzip 并且仍然可以免受 BREACH 的影响。