Class ZipUtils
java.lang.Object
tech.riemann.nif.utils.ZipUtils
ZIP工具类,提供文件的压缩和解压缩功能
H18/M44: 解压侧具备安全防护——
- 路径穿越(Zip Slip):拒绝绝对路径与
../逃逸条目(canonical 前缀校验) - 解压炸弹(ZIP bomb):条目数、单文件大小、解压总大小上限(默认 1024 条 / 100MB 单文件 / 1GB 总量)
- Author:
- Kerbores(kerbores@riemann.tech)
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic void解压ZIP文件static voidunzipWithStream(InputStream inputStream, String descDir) 使用流解压ZIP文件 该方法通过输入流读取ZIP文件,并将其内容解压到指定的目录中static voidunzipWithStream(InputStream inputStream, String descDir, int maxEntries, long maxSingleFileSize, long maxTotalSize) 使用流解压ZIP文件(带解压炸弹防护限制)static voidunzipWithStream(InputStream inputStream, String descDir, Charset charset, int maxEntries, long maxSingleFileSize, long maxTotalSize) 使用流解压ZIP文件(带解压炸弹防护限制 + 可配置文件名编码)static void压缩文件或目录
-
Constructor Details
-
ZipUtils
public ZipUtils()
-
-
Method Details
-
zipFiles
-
unzipFile
解压ZIP文件- Parameters:
zipPath- ZIP文件路径descDir- 解压目标目录- Throws:
IOException- 当解压过程中发生IO错误时抛出
-
unzipWithStream
使用流解压ZIP文件 该方法通过输入流读取ZIP文件,并将其内容解压到指定的目录中H18/M44: 使用默认安全限制——条目数 1024、单文件 100MB、总大小 1GB
- Parameters:
inputStream- 输入流,用于读取ZIP文件的内容descDir- 解压目标目录,ZIP文件的内容将解压到这个目录下
-
unzipWithStream
public static void unzipWithStream(InputStream inputStream, String descDir, int maxEntries, long maxSingleFileSize, long maxTotalSize) 使用流解压ZIP文件(带解压炸弹防护限制)H18: 拒绝路径穿越——绝对路径条目与
../逃逸条目直接抛异常; canonical 前缀校验同时拦截已存在符号链接的逃逸M44: 解压炸弹防护——条目数、单文件声明大小、解压总大小超限直接抛异常 (写入累计计数为硬防线,zip 头声明大小仅作粗筛)
- Parameters:
inputStream- 输入流,用于读取ZIP文件的内容descDir- 解压目标目录,ZIP文件的内容将解压到这个目录下maxEntries- 最大条目数(文件条目),超限视为解压炸弹maxSingleFileSize- 单文件最大解压大小(字节)maxTotalSize- 解压总大小上限(字节)
-
unzipWithStream
public static void unzipWithStream(InputStream inputStream, String descDir, Charset charset, int maxEntries, long maxSingleFileSize, long maxTotalSize) 使用流解压ZIP文件(带解压炸弹防护限制 + 可配置文件名编码)H18: 拒绝路径穿越——绝对路径条目与
../逃逸条目直接抛异常; canonical 前缀校验同时拦截已存在符号链接的逃逸M44: 解压炸弹防护——条目数、单文件声明大小、解压总大小超限直接抛异常 (写入累计计数为硬防线,zip 头声明大小仅作粗筛)
M46: 文件名编码可配置(默认 UTF-8;旧系统 GBK 生成的 zip 传
Charset.forName("GBK"))- Parameters:
inputStream- 输入流,用于读取ZIP文件的内容descDir- 解压目标目录,ZIP文件的内容将解压到这个目录下charset- 文件名编码maxEntries- 最大条目数(文件条目),超限视为解压炸弹maxSingleFileSize- 单文件最大解压大小(字节)maxTotalSize- 解压总大小上限(字节)
-