当我尝试使用apache POIs XSSFReader尝试获取Excel文件的样式表时,我得到了一段错误的代码。涉及该文件的所有操作如下所示:
XSSFReader reader = new XSSFReader(OPCPackage.open(excelFile.getPath(), PackageAccess.READ));
StylesTable table = reader.getStylesTable();
我收到以下错误:
造成:java.io.IOException:检测到Zip炸弹!该文件会 超过通常表明文件习惯的某些限制 增加内存使用量,从而可能带来安全风险。您可以 通过setMinInflateRatio()和setMaxEntrySize()if调整这些限制 您需要处理超出这些限制的文件。计数器: 1644067,cis.counter:16384,比率:0.009965530601855033Limits: MIN_INFLATE_RATIO:0.01,MAX_ENTRY_SIZE:4294967295
我不确定如何判断这是否为误报(在excel中打开文件似乎没问题),如果是,如何妥善处理?
答案 0 :(得分:5)
这些检查主要用于接受来自不受信任的对等方的文档的情况,例如:当您网站上的用户可以通过您的服务上传任意文档进行处理时。
在这种情况下,您希望避免接收因内存使用过多而导致服务器爆炸的文档。
因此,Apache POI具有默认限制,开发人员认为这些限制允许处理几乎所有有效文档,但应该阻止所有格式错误的文档。
每当您知道文档的来源并且您相信源不会生成恶意文档时,您可以在必要时安全地设置更高的限制。在您的情况下,压缩数据的大小远远低于扩展数据,这被认为是可疑的,因此通过设置较低的最小通货膨胀率,例如, ZipSecureFile.setMinInflateRatio(0.009)
,在加载文档之前,您应该可以使它适用于您。