编码与安全指南

Gzip 文本载荷:先识别容器再解码

追踪 UTF-8、Gzip 与 Base64 的处理顺序,区分 Gzip、zlib 和裸 DEFLATE。

Nav Tools ·

写清转换顺序

本站 Gzip 编码器先把 UTF-8 文本压缩成 Gzip 字节,再返回 Base64;解码器也要求此包装。

反向处理按顺序进行,合法 Base64 仍可能装着完全不同的二进制格式。

Text → UTF-8 bytes → Gzip bytes → Base64
Base64 → Gzip bytes → decompressed UTF-8 text

检查容器标识字节

Gzip 成员以 1f 8b 开头,常见压缩方法字节 08 表示 DEFLATE,ZIP 又是另一种容器。

选择解码器前检查字节,改文件名或随意去掉前缀不能把 zlib 或裸 DEFLATE 变成 Gzip。

Gzip header starts: 1f 8b 08
ZIP commonly starts: 50 4b 03 04

比较解压后的内容

两份有效 Gzip 可因头信息或压缩参数不同而具有不同字节,但还原相同文字。

文本往返应比较解压文字及 UTF-8 字节;需要精确容器产物时才比较压缩文件哈希。

限制解压扩张

小压缩输入可以扩张成很大的输出,解压成功不说明内存占用安全。

本站将解压输出限制为一百万字节,大数据应使用带输出限制的流式工具,不应取消保护。

参考资料

← 编码与安全指南