Python pickle解压时可能存在安全风险
Python pickle解压时可能存在安全风险
如果解压对像中有重构的reduce操作, pickle.loads时会执行reduce方法中的内容.
比如:
import io import os import pickle class BadCode(object): def __reduce__(self): return (os.system, ('echo fuckyou!',)) bc = BadCode() bbb = pickle.dumps(bc) pickle.loads(bbb)
限制方法, 重载一下Unpicke方法, 只解压特定类型的对像.
class RestrictedUnpickler(pickle.Unpickler): def find_class(self, module, name): print(module, name) if module == "builtins" and name in {"str", "list", "dict", "set", "int", "float", "bool"}: return getattr(__import__(module), name) raise pickle.UnpicklingError(f"global '{module}.{name}' is forbidden") def load_reduce(self): # 禁止使用 reduce raise pickle.UnpicklingError("reduce() is not allowed") def restricted_loads(s): return RestrictedUnpickler(io.BytesIO(s)).load() ok = restricted_loads(bbb) print('ok: ',ok)
人工智障与神经病网络
https://www.cnblogs.com/JiangOil/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇