pra*_*mic 14 python save data-structures
我正在使用Python编写一个程序,希望用户能够保存他们正在处理的数据.我看过cPickle; 它似乎是一种快速简便的数据保存方式,似乎不安全.由于可以腌制整个函数,类等,我担心流氓保存文件会将有害代码注入程序.有没有办法可以阻止这种情况,或者我应该考虑其他保存数据的方法,例如直接转换为字符串(这似乎也是不安全的),或者创建XML层次结构,并将数据放入其中.
我是python的新手,所以请耐心等待.
提前致谢!
编辑:至于我存储的数据类型,主要是字典和列表.名称,速度等信息现在相当简单,但未来可能会变得更加复杂.
Nad*_*mli 23
根据您的描述,JSON编码是安全且快速的解决方案.python2.6中有一个json模块,你可以像这样使用它:
import json
obj = {'key1': 'value1', 'key2': [1, 2, 3, 4], 'key3': 1322}
encoded = json.dumps(obj)
obj = json.loads(encoded)
JSON格式是人类可读的,与python中的字典字符串表示非常相似.而且没有像泡菜这样的安全问题.如果你没有python2.6,你可以安装cjson或simplejson
你不能使用JSON来保存像Pickle这样的python对象.但你可以用它来保存:字符串,字典,列表......对于大多数情况来说它就足够了.
解释为什么泡菜不安全.从python 文档:
pickle和cPickle模块周围的大多数安全问题涉及unpickling.没有已知的与酸洗相关的安全漏洞,因为您(程序员)控制pickle将与之交互的对象,并且它生成的所有对象都是字符串.
但是,对于unpickling,对unpickle一个不可信的字符串绝不是一个好主意,该字符串的来源可疑,例如,从套接字读取的字符串.这是因为unpickling可以创建意外的对象,甚至可能运行这些对象的方法,例如它们的类构造函数或析构函数...... 故事的寓意是你应该非常小心应用程序的字符串来源.
有一些方法可以保护自己,但在您的情况下使用JSON要容易得多.
在我们回答之前,您需要向我们提供更多背景信息:您要保存什么类型的数据、有多少数据、您想如何访问它?
至于泡菜:它们不存储代码。当您 pickle 函数或类时,存储的是名称,而不是实际代码本身。