我正在构build一个部署到IIS的ASP.NET应用程序,我正在积极地开展下列必要的步骤来支持Content-Encoding: gzip
目前没有我正在部署到公共networking的服务器的计划,但我想至less调查在我的服务器上减轻ZipBomb攻击的选项。 如果我的客户决定通过公共渠道向用户提供他们的应用程序,我希望已经有了我的鸭子。
如果我能够弄清楚如何让GZ POST机构通过IIS(与SO相关的活动项目)来到,那么在没有解压文件的情况下检测未压缩内容的大小,我有什么select?
作为一个例子,如果有人在我的服务器上发布了42个内容,那么解压内容就会引爆炸弹。 是否存在任何选项来检测“这个”42kb代表4.5PB的数据并拒绝它?
如何以编程方式检测压缩内容是否分层而不引爆炸弹,以及不将内容stream式传输到固定大小的缓冲区中?
(也就是说:是否有任何实用程序,服务或方法可以普遍应用于查询zip文件的内容,而无需实际打开它?)
ZIP格式指定压缩和未压缩的文件大小。 parsing这些头文件,你应该能够提取所需的信息。
在这里看看有关ZIP标题的更多信息。
除了在其他答案中给出的检测,你可以通过强制解压到一个对你的服务器的操作不重要的特定分区(即不是/分区,而不是/ tmp等)来解压。
你甚至可以dynamic地做到这一点,例如:在另一个分区上创build一个2GB的文件,格式化它(mkfs等),并将其挂载到适当的挂载点(例如:用户homedir下的特定子目录)。并在新安装的目录中发生解压缩(包括任何tmp文件)。 然后移动文件一旦你压缩,卸载该分区和“回收”的2GB文件。
有多种方法来减轻影响,并确保zipbomb不会变得太大(它不能超过分区的大小)