我知道您可能在想“不要存储用户的凭据,用盐+胡椒对它们进行哈希处理,你这个白痴! ”,但请继续阅读。
我正在开展一个项目,该项目将向用户询问其数据库的凭据(登录名/密码)。这些凭据将针对数据库进行尝试,如果连接成功,我将“保留”它们以按照用户的要求对数据库进行一些工作(创建表、更改行、执行 SELECT 等)。
这意味着,每次用户执行某项操作时,我都会在执行他的请求之前重新连接到数据库 => 我无法对凭据进行哈希处理,因为它们对后续请求毫无用处。如果你愿意,它就像 phpMyAdmin。
所以我想出了各种可能,但每一个都有缺陷。我正在寻找建议以确定哪个更好。
- 只需在 clear 中使用带有登录名/密码的 Session cookie。但只允许通过 HTTPS 使用:这是最简单的实现方式。我看到的唯一缺点是如果客户端存在 XSS,则可以检索凭据。
- 相同的会话 cookie,但使用 AES 加密的登录名/密码。我相信这就是 PhpMyAdmin 所使用的。我也可以通过只允许 HTTPS 走得更远。
- 将凭证以明文形式存储在本地会话存储中(sqlite 中的 session.db),并为将使用给定令牌 + 浏览器详细信息检索的客户端使用令牌。缺点:如果攻击者访问 session.db 文件,他将能够读取尚未从文件中删除的会话。我不认为加密它们会有用,因为如果他可以访问 session.db,他当然也可以访问用于加密它们的 SECRET_KEY。
你怎么看?你会怎么办?