gpt4 book ai didi

python - 从 pickle 对象中安全地提取部分数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:04 27 4
gpt4 key购买 nike

我有一个对象的 pickled 实例,并且必须从不受信任的来源接受这些 pickled 实例。我可以使用内部状态(只是一个整数数组)来重新创建实例,而无需执行 pickle 对象的任何代码。因此,我的问题是是否可以从 pickle 中仅提取一些数据对象而不执行任何代码。

最佳答案

一个想法可能是以字符串的形式从文件中读取 pickle 对象,然后使用 pickletools.dis 查看其中的内容......只允许特定的命令列表('STOP', 'INT', …) 位于第二列。这将否定 pickle 具有您担心的任何类型的对象,并且如果您仅针对基本 Python 对象的非常具体的列表,那么您可能能够安全地做到这一点。

这是使用 pickletools.dis 得到的结果:

>>> import pickletools
>>> import pickle
>>>
>>> p1 = pickle.dumps(1)
>>> p2 = pickle.dumps(min)
>>>
>>> pickletools.dis(p1)
0: I INT 1
3: . STOP
highest protocol among opcodes = 0
>>> pickletools.dis(p2)
0: c GLOBAL '__builtin__ min'
17: p PUT 0
20: . STOP
highest protocol among opcodes = 0
>>>

这比编写完整的 pickle 解析器更好,如果您只想允许像 INT 这样的简单对象,这可能是可行的。

关于python - 从 pickle 对象中安全地提取部分数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29495094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com