跳到内容

suspicious-pickle-usage (S301)

源自 flake8-bandit linter。

作用

检查对 pickle 函数或包装它们的模块的调用。

为什么这不好?

使用 pickle 和其他反序列化模块反序列化不受信任的数据是不安全的,因为它可能允许创建任意对象,然后这些对象可用于实现任意代码执行和其他意外行为。

避免使用 pickle 和其他反序列化模块反序列化不受信任的数据。相反,考虑更安全的格式,例如 JSON。

如果您必须使用 pickle 反序列化不受信任的数据,请考虑使用密钥对数据进行签名,并在反序列化有效负载之前验证签名。这将防止攻击者将任意对象注入到序列化数据中。

预览 中,此规则还将标记对 pickle 函数的引用。

示例

import pickle

with open("foo.pickle", "rb") as file:
    foo = pickle.load(file)

建议改为

import json

with open("foo.json", "rb") as file:
    foo = json.load(file)

参考