编码与安全指南
Gzip 文本载荷:先识别容器再解码
追踪 UTF-8、Gzip 与 Base64 的处理顺序,区分 Gzip、zlib 和裸 DEFLATE。
写清转换顺序
本站 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 字节;需要精确容器产物时才比较压缩文件哈希。
限制解压扩张
小压缩输入可以扩张成很大的输出,解压成功不说明内存占用安全。
本站将解压输出限制为一百万字节,大数据应使用带输出限制的流式工具,不应取消保护。