Chi*_*hid 3 java excel file apache-poi
我正在使用这个函数调用,因为当我读取一个受信任的文件时,它会导致zipbomb错误.
ZipSecureFile.setMinInflateRatio(双倍比例)
FileInputStream file = new FileInputStream("/file/path/report.xlsx");
ZipSecureFile.setMinInflateRatio(-1.0d);
XSSFWorkbook wb = new XSSFWorkbook(file);
Run Code Online (Sandbox Code Playgroud)
我想知道它是如何工作的?
我能找到的唯一来源是https://poi.apache.org/apidocs/org/apache/poi/openxml4j/util/ZipSecureFile.html
但是,由于我不熟悉这个概念,所以无法得到清晰的图像.
有什么区别
ZipSecureFile.setMinInflateRatio(-1.0d);
Run Code Online (Sandbox Code Playgroud)
VS
ZipSecureFile.setMinInflateRatio(0.009);
Run Code Online (Sandbox Code Playgroud)
VS
ZipSecureFile.setMinInflateRatio(0);
Run Code Online (Sandbox Code Playgroud)
拉链炸弹检测的工作方式如下:
在解压缩时检查比率compressedBytes/uncompressedBytes,如果这低于特殊量(MinInflateRatio),则检测到炸弹.
因此,如果该比率compressedBytes/uncompressedBytes是0.01d例如,那么这意味着压缩文件比未压缩文件小100倍而没有信息丢失.换句话说,压缩文件仅在文件大小的1%中存储相同的信息,未压缩的文件需要.这不太可能使用现实生活中的数据.
为了表明我们不太可能看到(以流行的科学方式)压缩如何工作:
我们有字符串
"This is a test for compressing having long count of characters which always occurs the same sequence."
这需要101个字节.假设此字符串在文件中出现100,000次.然后解压缩它需要10,100,000个字节.压缩算法会为该字符串提供一个ID,并且只有将字符串映射到该ID后才会存储该字符串,并且将存储该字符串出现在文件中的ID的100,000倍.这将需要101个字节+ 1个字节(ID)+ 100,000个字节(ID)= 100,102个字节.而这将有比例compressedBytes/uncompressedBytes的0.009911089d,例如.
因此,如果我们将其设置MinInflateRatio为低于0.01d,那么我们接受这种不太可能的数据压缩率.
此外,我们可以看到,该比例compressedBytes/uncompressedBytes也只能是0如果compressedBytes为0.但是,这将意味着,没有任何字节进行解压缩.因此,一个MinInflateRatio的0.0d永远无法达到,也不能下冲.所以用MinInflateRatio的0.0d所有可能的比例将被接受.
当然MinInflateRatio,-1.0d也永远不会达到也不会低估.因此,使用它也将接受所有可能的比率.
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |