在python3 pickle模块的文档中,它说:
“pickle模块不是为了防止错误或恶意构造的数据而设计的。永远不要取消从不受信任或未经身份验证的来源接收的数据。”
从不受信任的来源取消筛选数据的风险是什么?不受信任的数据本身是危险的吗?或者,使用未经酸洗的对象是唯一危险的吗?那么,取消不受信任的数据,然后(在对结果对象执行任何操作之前)证明它是否是保存对象是否安全呢?
发布于 2013-03-30 20:53:20
Pickle通过查找可调用对象(通常是类,但实际上是任何可调用的)并使用固定的参数调用它们来重新创建对象。这意味着unpickling可以在任何地方运行任何带有任何参数的callable。即使相关模块还没有导入,pickle也会很乐意导入它。例如,execute os.system只需要几十个字符。所以你甚至在拿回一个对象之前就完蛋了。
发布于 2013-03-30 20:53:02
取消pickle相当于执行任意代码。攻击者可以创建一个pickle,该pickle将在取消pickle期间执行系统命令。
这里有一个来自a good blog post on the topic的例子
这清楚地说明了pickle是不安全的。许多人认为这是因为它可以加载您所期望的以外的类,并可能欺骗您运行它们的函数。但实际的安全风险要危险得多。攻击者可以利用取消酸洗在您的计算机上执行任意命令!
发布于 2013-03-30 20:53:07
pickle格式使用成熟的虚拟机。如果输入机器的代码由攻击者控制,它可以做对象序列化以外的事情(包括执行任意OS命令)。
有关讨论,请参阅Why Python Pickle is Insecure。
https://stackoverflow.com/questions/15718667
复制相似问题