当我尝试使用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.009965530601855033Limits:MIN_INFLATE_RATIO:0.01,MAX_ENTRY_SIZE:4294967295
我不知道如何判断这是否是误报(在Excel中打开文件似乎没问题),如果是这样,如何正确处理这个?
这些检查主要用于您接受来自不受信任的同行的文档的情况,例如,当您网站上的用户可以上传任意文档以通过您的服务进行处理时.
在这种情况下,您希望避免接收因内存使用过多而导致服务器爆炸的文档.
因此,Apache POI具有开发人员认为"理智"的默认限制,以允许处理几乎所有有效文档,但应阻止所有恶意格式化的文档.
只要您知道文档的来源并且您信任源不会生成恶意文档,您可以在必要时安全地设置更高的限制.在您的情况下,压缩数据的大小远远低于扩展数据,这被认为是可疑的,因此通过设置较低的最小通货膨胀率,例如ZipSecureFile.setMinInflateRatio(0.009)
,在加载文档之前,您应该能够使其适用于您.