我正在完成一些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更快,但我不认为它解决了上面更安全的定义。
感谢。
答案 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)