python - 如何通过 JSON 执行任意代码以及如何清理输入

标签 python json security jsonpickle

documentation用于 JSON 序列化和反序列化的 Python 的 jsonpickle 模块的说明

Loading a JSON string from an untrusted source represents a potential security vulnerability. jsonpickle makes no attempt to sanitize the input

但我想知道攻击者如何通过 JSON 消息执行任意代码?

此外,按照文档中的建议清理输入的最佳方法是什么?我的应用程序中的 JSON 数据不可信(它来自发送 JSON 消息的客户端)。

最佳答案

jsonpickle 不是 JSON。 jsonpickle 允许创建可能造成有害影响的任意 Python 对象。清理意味着 JSON 对象仅包含可以由 jsonpickle 解释的数据。通常错误的数据会导致异常,但可用于触发不需要的行为。

__reduce__ 利用(参见,例如 Into The Jar | Exploitation of jsonpickle)

jsonpickle.decode('{"py/object": "list", "py/reduce":[{"py/type": "subprocess.Popen"}, ["ls"], null, null, null]}')

只是执行任何命令的一种直接方式。更微妙的方式取决于您的实际代码。

所以简短的回答是,不要在不受信任的环境中使用 jsonpickle。使用普通 JSON 并在使用前检查输入。

关于python - 如何通过 JSON 执行任意代码以及如何清理输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38812106/

相关文章:

对构造函数的 Python 函数式编程引用

python - 如何在 Flask 中实现需要登录的装饰器

python - 如何从python中的资源URL获取完整的URL

python - 使用数组或记录数组操作Python中的非相邻单元格

json - 查找嵌套 JSON 文档中值大于 INT 的行

java - Android ksoap 中的安全 header

json - 如何从 Powershell 脚本读取 JSON 数据并遍历它

android - phonegap jQuery .ajax 跨域请求在浏览器中工作,在 Android SDK 中失败

android - 基于软件的卡仿真 (HCE) 如何保证 NFC 安全?

php - Paypal IPN 安全