我正在开发一个将连接到数据库的 Web 项目。为此,我必须清楚地存储该数据库用户的登录名/密码(以对称方式加密),以便能够重新连接每个操作(如创建表、添加条目等)而无需请求每次都有这些凭据。
我知道以明文形式存储密码太不安全了,而且我不可能。
这就是我的想法,你能告诉我它是否正确或/以及是否有更好的可能性?谢谢 :)
应用程序将分为两个独立的部分:前端和后端。
当用户通过前端登录时,会以明文形式发送登录名和密码(我会推荐使用 HTTPS)。后端会尝试连接数据库,如果连接成功,它会使用Blowfish对登录名和密码进行加密,并将它们返回给前端。
对于任何后续请求,前端将不得不发送加密的登录名/密码,而不知道明文的,只知道加密的。
如果有人可以访问该用户的数据(例如 XSS),他将只能访问加密的凭据,而不能访问明文的凭据。
如果攻击者可以进行 MITM,那么只有初始登录是有风险的,所有接下来的请求都将使用加密的凭据。
我考虑过使用 cookie/会话,但它是相同的:值以明文或 base64 编码存储。不是很安全!
Blowfish 的想法来自 PhpMyAdmin 如何使用它(又名,相同)。此外,即使在 PhpMyAdmin 上,登录部分也是明文发送的。
你认为我的实现是正确的,还是你有更好的建议?我真的很想做一些尽可能安全的事情。到目前为止,只有登录部分困扰着我:/
谢谢你的想法。
编辑:
显然,我的问题不够清楚,我会尝试更明确:
我想构建 PhpMyAdmin 的替代方案。PhpMyAdmin 是一个中间件,它通过提供该数据库中任何用户的登录名/密码来连接到 MySQL 服务器。Web 表单中询问的凭据是用于 MySQL 数据库的凭据。
因此,在用户成功登录后的整个会话期间,PhpMyAdmin 通过使用 Blowfish 加密密码将登录名/密码存储在会话中。
这是无法避免的,因为每次用户发出请求(如创建表、插入数据、更新或删除数据)时,PhpMyAdmin 都需要使用登录时提供的凭据重新连接到该数据库,然后执行用户操作请求。
然后,PhpMyAdmin不可能只存储凭据的哈希值,因为在同一用户发出的后续请求期间,它将无法重新连接到数据库。
我知道存储可以明文检索的密码根本不是一个好的解决方案,这就是这个问题的原因:不要告诉我散列更好,因为在我的情况下它绝对没用,但要知道是否有是比对称加密 + HTTPS 更好的选择,用于保存用户执行的每个操作所需的密码。