泡菜:不安全还是快?

时间:2013-10-26 12:44:20

标签: python pickle

我正在完成一些scipy讲座(http://scipy-lectures.github.io/intro/language/standard_library.html#pickle-easy-persistence),我发现了关于Pickle的声明:

Useful to store arbitrary objects to a file. Not safe or fast!

这是什么意思?不安全(根据Pickle文档),因为不是来自未知来源的UnPickle文件或不安全,因为你并不总是检索原始对象?

更安全,更快捷的替代方案是什么?我知道cPickle更快,但我不认为它解决了上面更安全的定义。

感谢。

2 个答案:

答案 0 :(得分:8)

在生产代码中使用pickle易受设计攻击。任意代码可以执行 unpickling。您可以安全地仅取消来自可信来源的数据。 永远不要取消从不受信任或未经身份验证的来源收到的数据。

有关实际应用样本,请参阅here

对于faster alternative,有marshal,python 内部 serealization库。但与pickle(或cPickle,它只是一个C实现)不同,它不太稳定(参见docs),它的输出是架构和os独立,取决于python版本。这是Windows平台上的对象编组,使用python 2.7.5保证在安装了python 2.7.5的OS X或Ubuntu上不可编组,但不能保证在Windows上使用python 2.6不可编组。

Another faster,设计更安全,但less functional序列化替代方案为JSON

答案 1 :(得分:0)

原来的模块Pickle几乎从未使用过。

如果您需要快速完成,请使用cPickle。

如果您需要安全的,请尝试sPickle