【发布时间】:2020-01-31 19:01:03
【问题描述】:
我正在阅读有关持久实例上下文中酸洗的内容,并遇到了这个 sn-p:
Pickle 文件可能会被黑客入侵。如果您通过网络收到原始 pickle 文件,请不要相信它!它可能包含恶意代码,当您尝试对其进行反酸处理时会运行任意 python。 [1]
我的理解是酸洗将数据结构转换为字节数组,并且泡菜库还包含获取酸洗字节数组并从中重建python实例的方法。
我测试了一些代码,看看是否只需将代码放入类或 init 方法即可运行它:
import pickle
class A:
print('class')
def __init__(self):
print('instance')
a = A()
print('pickling...')
with open('/home/usrname/Desktop/pfile', 'wb') as pfile:
pickle.dump(a, pfile, pickle.HIGHEST_PROTOCOL)
print('de-pickling...')
with open('/home/usrname/Desktop/pfile', 'rb') as pfile:
a2 = pickle.load(pfile)
但这只会产生
class
instance
pickling...
de-pickling...
建议 __ init__ 方法在实例未腌制时实际上并没有运行。所以我仍然很困惑你如何让代码在这个过程中运行。
【问题讨论】:
标签: python-3.x serialization pickle