pickle反序列化学习
Python Pickle 反序列化
作者:HDdss(代放)
一、Python 基础语法
1.1 变量定义与数据类型
1 | # 基本数据类型 |
1.2 列表(List)
1 | fruits = ["apple", "banana", "orange"] |
1.3 元组(Tuple)
1 | coords = (10, 20) |
1.4 字典(Dictionary)
1 | user = {"name": "Alice", "age": 20} |
二、什么是序列化与反序列化
- 序列化:把对象转成可存储或可传输的字节流。
- 反序列化:把字节流还原为对象。
在 Python 中,pickle 是常见的序列化模块,但它并不是“安全数据格式”。
三、pickle 反序列化风险
pickle.loads() 在反序列化时可以触发对象的构造与方法调用。如果输入数据可控,攻击者可能构造恶意 payload,实现任意代码执行。
高风险场景
- 从用户上传内容中直接
pickle.loads() - 从不可信网络来源读取 pickle 数据
- 在 Web 接口中对参数直接反序列化
四、安全建议
- 不要反序列化不可信数据。
- 优先使用 JSON 等安全格式进行跨系统传输。
- 如必须使用 pickle,至少要保证数据来源可信、传输链路完整,并增加签名校验。
五、总结
pickle 功能强大,但安全边界非常明确:它适合可信环境下的对象持久化,不适合处理外部不可信输入。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 F1fk3r's Blog!
评论