使用apache poi - 检测到Zip Bomb

use*_*736 5 java apache-poi sxssf

当我尝试使用包含超过64000条记录的apache poi将数据写入excel表时,使用SXSSF并且我收到以下错误,

检测到拉链炸弹!该文件将超过最大值.压缩文件大小与扩展数据大小的比率.这可能表示该文件用于夸大内存使用量,因此可能带来安全风险.如果需要处理超出此限制的文件,可以通过ZipSecureFile.setMinInflateRatio()调整此限制.计数器:820224,cis.counter:8192,比率:0.009987515605493134Limits:MIN_INFLATE_RATIO:0.01

我找到了一个解决方案,通过添加ZipSecureFile.setMinInflateRatio(0.009)来说明,我需要知道它为什么会发生以及我需要为上述错误广告提供的限制在哪里添加解决方案,解决方案的参考:( 如何确定检索Excel文件时是否抛出Zip Bomb错误样式表是否合法?)

如果有任何其他解决方案,请告诉我

小智 15

解决方法是在打开工作簿之前添加此行:

ZipSecureFile.setMinInflateRatio(0);
Run Code Online (Sandbox Code Playgroud)

  • 应该有一个解释。例如,它应该做什么?请通过[编辑(更改)您的答案](https://stackoverflow.com/posts/50641893/edit) 进行回复,而不是在评论中回复(***没有***“编辑:”、“更新:”或类似 - 答案应该看起来像今天写的一样)。 (3认同)

cen*_*tic 8

"Zip炸弹"是用于攻击向量的术语,其中小型zip文件扩展为非常大的未压缩文件,因此可能导致耗尽内存或磁盘空间等问题.

通常创建此类zip是为了对从外部源接收zip文件的系统造成拒绝服务攻击.

由于.xlsx文件实际上是包含XML文件的压缩文件,因此有可能在POI中造成这样的zip炸弹漏洞.

为了防止这种情况发生,Apache POI默认内置并启用了一些安全措施.因此,如果您创建具有不寻常内容的文件,例如具有相同内容的许多行/列,您可以遇到这些安全措施并接收如上所示的异常.

如果完全控制已处理文件的创建,则可以调整错误消息中给出的设置以避免异常.

在编写大型格式化Excel(.xlsx)以及如何确定是否抛出Zip Bomb错误时,请参阅https://bz.apache.org/bugzilla/show_bug.cgi?id=58499以获取相关问题和ZIp-bomb异常检索Excel文件样式表是否合法?进行类似的讨论.