python - 攻击 Python 的 pickle

标签 python security pickle

我正在编写一个将用户输入存储在对象中的网络应用程序。该对象将被 pickle 。

用户是否有可能制作恶意输入,当对象被解封时可能会做一些令人震惊的事情?

这是一个非常基本的代码示例,它忽略了封装等奇妙的原则,但概括了我正在研究的内容:

import pickle

class X(object):
    some_attribute = None

x = X()
x.some_attribute = 'insert some user input that could possibly be bad'

p = pickle.dumps(x)

# Can bad things happen here if the object, before being picked, contained
# potentially bad data in some_attribute?
x = pickle.loads(p)

最佳答案

是,不是……

否 - 除非解释器或 pickle 模块存在错误,否则您不能通过 pickle 文本或类似的方式运行任意代码。除非 pickle 文本稍后被 eval 编辑,或者您正在做一些事情,例如创建一个具有此数据中提到的类型的新对象。

是的 - 根据您稍后计划对对象中的信息执行的操作,用户可以执行各种操作。从 SQL 注入(inject)尝试到更改凭据、暴力破解密码或在验证用户输入时应考虑的任何事情。但您可能正在检查所有这些。


编辑:

python 文档说明了这一点:

Warning The pickle module is not intended to be secure against erroneous or maliciously constructed data. Never unpickle data received from an untrusted or unauthenticated source.

但这不是你的情况 - 你接受输入,通过常规验证,然后 pickle 它。

关于python - 攻击 Python 的 pickle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282175/

相关文章:

c# - 如何禁用 wpf webbrowser 控件上的拖放

python - pickle 字符串的更有效方法

python - 使用 pickle 将巨大的二元字典保存到文件中

python - Phonon:视频播放后如何清屏

python 的 round() 函数不起作用?

验证signtool签署的数字签名的Java程序

javascript - 为什么将 window.location.href 设置为 session 存储项值会被视为 DOM XSS 漏洞?

python - 解压后系统使用大量内存

python - 寻找 `SupportsRound` 的工作示例

python - 在 Pandas 中创建百分位桶