如何确定检索Excel文件样式表是否合法时引发的Zip Bomb错误?

当我尝试使用apache POIs XSSFReader获取Excel文件的样式表时,我有一段错误的代码。 我所做的,涉及文件,如下所示:

XSSFReader reader = new XSSFReader(OPCPackage.open(excelFile.getPath(), PackageAccess.READ)); StylesTable table = reader.getStylesTable(); 

我得到以下错误:

由:java.io.IOException引起:检测到Zip炸弹! 该文件将超过一定的限制,通常表明该文件是用来膨胀内存使用,从而可能构成安全风险。 如果您需要使用超过这些限制的文件,可以通过setMinInflateRatio()和setMaxEntrySize()来调整这些限制。 计数器:1644067,cis.counter:16384,比率:0.009965530601855033限制:MIN_INFLATE_RATIO:0.01,MAX_ENTRY_SIZE:4294967295

我不知道如何判断这是否是一个误报(在Excel中打开文件似乎很好),如果有的话如何正确地处理这个?

这些检查主要用于您接受来自不受信任对等方的文档的情况,例如,当您的网站上的用户可以上传任意文档以通过您的服务进行处理时。

在这种情况下,您希望避免因为内存过度使用而接收可能会炸毁服务器的文档。

因此,Apache POI具有默认的限制,开发人员认为这个限制允许处理几乎所有有效的文档,但应该阻止所有恶意格式的文档。

无论何时您知道文档来自哪里,并且您相信源不会产生恶意文档,您可以根据需要安全地设置更高的限制。 在你的情况下,压缩数据的大小远低于扩展数据,这被认为是可疑的,因此通过设置较低的最小通货膨胀率,例如ZipSecureFile.setMinInflateRatio(0.009) ,在加载文档之前,你应该能够它为你工作。