Pydantic 的 SecretStr 的目的是什么?

Mik*_*son 12 python pydantic

我正在学习Pydantic模块,尝试通过玩具FastAPI Web 后端作为示例实现来采用其功能/优点。

我选择使用PydanticSecretStr来“隐藏”密码。我知道它并不真正安全,而且我还在passlib数据库存储中使用适当的密码加密(并使用 HTTPS 来保证传输中的安全)。

但这让我思考:如果没有真正的安全性SecretStr,它的目的是什么?

我的意思并不是要让这听起来煽动性。Pydantic 并不声称秘密类型是安全的。他们提供的唯一主张是:

您可以使用SecretStrSecretBytes数据类型来存储您不希望在日志记录或回溯中可见的敏感信息。

但我不明白这一点:如何SecretStr帮助隐藏日志记录或回溯?我不能确保根本不记录密码吗?


有人可以提供一个解释+示例来帮助我更好地理解它何时以及如何有用吗?我正在努力寻找它的真正目的......如果没有好处,那么最好只使用 anstr作为模型/模式而不是SecretStr.

cth*_*lho 22

您自己已经回答了问题的很大一部分。

您可以使用 SecretStr 和 SecretBytes 数据类型来存储您不希望在日志记录或回溯中可见的敏感信息。

我想补充另一个好处。

开发人员不断被提醒,他们正在使用秘密,因为他们需要调用.get_secret_value()来读取真正的值。

我们可以将其视为语法盐(类似于语法糖,这使事情变得更容易)。语法盐使事情更难搞砸。如果您尝试在 FastAPI 等响应模型中发送 SecretStr,则需要主动启用该功能。

来自文档

class SimpleModelDumpable(BaseModel):
    password: SecretStr

    class Config:
        json_encoders = {
            SecretStr: lambda v: v.get_secret_value() if v else None
         }
Run Code Online (Sandbox Code Playgroud)