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

时间:2016-08-24 09:59:57

标签: java excel security apache-poi

当我尝试使用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中打开文件似乎没问题),如果是,如何妥善处理?

1 个答案:

答案 0 :(得分:5)

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

在这种情况下,您希望避免接收因内存使用过多而导致服务器爆炸的文档。

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

每当您知道文档的来源并且您相信源不会生成恶意文档时,您可以在必要时安全地设置更高的限制。在您的情况下,压缩数据的大小远远低于扩展数据,这被认为是可疑的,因此通过设置较低的最小通货膨胀率,例如, ZipSecureFile.setMinInflateRatio(0.009),在加载文档之前,您应该可以使它适用于您。