python - Pydantic 的 SecretStr 的目的是什么?
问题描述
我正在学习Pydantic模块,试图通过一个玩具FastAPI Web 后端来采用它的特性/优点作为示例实现。
我选择使用PydanticSecretStr
来“隐藏”密码。我知道它不是很安全,而且我还在passlib
数据库存储中使用正确的密码加密(并使用 HTTPS 来确保传输安全)。
但这让我想到:如果没有真正的安全性SecretStr
,它的目的是什么?
我并不是说这听起来很煽情。Pydantic 并未声称 Secret Types 是安全的。他们提供的唯一声明是:
您可以使用
SecretStr
和SecretBytes
数据类型来存储您不希望在日志记录或回溯中可见的敏感信息。
但我不明白这一点:如何SecretStr
帮助隐藏日志记录或回溯?我不能确保根本不记录密码吗?
有人可以提供解释+示例来帮助我更好地理解它何时以及如何有用吗?我正在努力寻找它的真正目的......如果没有好处,那么最好只使用str
模型/模式而不是SecretStr
.
解决方案
您自己已经回答了大部分问题。
您可以使用 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
}
推荐阅读
- kubernetes - 端口转发如何避免 mtls
- python - __init__.py 读取模块内的文件,当顶部模块被压缩时失败
- asp.net - 带有 Google 身份验证的 Asp.Net MVC 和 Web Api
- asp.net-mvc - Kendo DropDownListFor 不会超出引导列
- c# - 执行任务并等待返回 whitout 阻塞 GUI
- marklogic - MarkLogic - 通过 REST API 调用自定义端点时出现“无法读取模块”错误
- sql-server - OLAP Cube 列属性值
- python - datetime.timestamp() 丢失时间(一小时)
- python - H3lp 高中生与 Python 循环
- alexa - 无法调试“请求的技能响应有问题”