没有挑剔的危险

时间:2013-03-30 12:45:52

标签: python pickle

在python3 pickle模块的文档中,它说:

” pickle模块不是为了防止错误或恶意构造的数据。切勿取消从不受信任或未经身份验证的来源收到的数据。“

从不受信任的来源取消数据的风险是什么?不受信任的数据本身的破坏是危险的吗?或者使用未打印的物体是否危险?因此,对不可信的数据进行取消分类然后(在对结果对象进行任何操作之前)证明它是一个保存对象是否安全?

3 个答案:

答案 0 :(得分:2)

取消腌菜相当于执行任意代码。攻击者可以创建一个pickle,它将在unpickling期间执行系统命令。

以下是a good blog post on the topic的示例:

  

这清楚地表明泡菜是不安全的。许多人认为这是因为它可以加载除你期望之外的类,并可能欺骗你运行它们的功能。但实际的安全风险要大得多。 可以利用Unpickling在您的计算机上执行任意命令!

答案 1 :(得分:2)

Pickle通过查找callables(通常是类,但实际上是任何可调用的对象)重新创建对象,并使用固定参数调用它们。这意味着unpickling可以使用任何参数运行任何可调用的任何地方。即使尚未导入相关模块,pickle也会很乐意导入它。例如,execute os.system只需要几十个字符。所以,在你拿回一个物品之前,你就搞砸了

答案 2 :(得分:1)

pickle格式使用完整的虚拟机。如果输入到机器中的代码由攻击者控制,它可以完成除对象序列化之外的任务(包括执行任意OS命令)。

有关讨论,请参阅Why Python Pickle is Insecure