我正在学习Pydantic模块,尝试通过玩具FastAPI Web 后端作为示例实现来采用其功能/优点。
我选择使用PydanticSecretStr来“隐藏”密码。我知道它并不真正安全,而且我还在passlib数据库存储中使用适当的密码加密(并使用 HTTPS 来保证传输中的安全)。
但这让我思考:如果没有真正的安全性SecretStr,它的目的是什么?
我的意思并不是要让这听起来煽动性。Pydantic 并不声称秘密类型是安全的。他们提供的唯一主张是:
您可以使用
SecretStr和SecretBytes数据类型来存储您不希望在日志记录或回溯中可见的敏感信息。
但我不明白这一点:如何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)
| 归档时间: |
|
| 查看次数: |
10993 次 |
| 最近记录: |