首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >密码加密,在会话中存储密码

密码加密,在会话中存储密码
EN

Stack Overflow用户
提问于 2013-01-12 21:35:32
回答 1查看 4.9K关注 0票数 19

我需要存储密码并再次使用它。我认为这一点也不安全。

场景:

我想创建一个网页邮件程序,用户登录与用户名和密码,然后检查他们的电子邮件。此工具不打算将密码存储在数据库中。但在PHP中,我们需要连接到用户导航到的每个页面中的邮件服务器。因此需要用户名和密码才能连接到邮件服务器。如何才能以最安全的方式做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2013-01-12 22:05:57

由于存储密码并不是预期的,而且还必须多次重新输入密码也是不可取的,我看到的唯一解决方案是:

  • 使用足够长度的随机密钥加密密码(例如AES)
  • 将加密的密码和用户名存储在session
  • 中加密用户名和邮件服务器可能也没有错误,以防万一。这不会造成伤害,而且假定攻击者在服务器上没有已知用户名。
  • 将加密密钥存储在cookie

这并不完美,但它应该工作得相当好,而且它可能是您所能得到的最好的权衡。

对于每个请求,用户的浏览器将发送cookie,PHP脚本可以使用cookie来解密会话中存储的数据,并在IMAP/POP服务器上执行请求。

有人利用您的服务器并获得访问会话存储的权限,将能够窃取加密的密码,但如果您的随机密钥具有足够的长度和良好的随机质量,这是非常徒劳的。

关键是,你只能用一个你不知道的秘密来保护一些东西。如果您有必要的信息来解密服务器上的某些信息(在本例中为IMAP密码),例如在会话存储中,每个使用您的服务器的人都可以执行相同的操作。无论你的加密有多强,都不会有任何不同。

确保秘密保密的唯一方法是用你不知道的东西加密它们,只有用户(或者在这种情况下是用户的浏览器)知道的东西。

这导致了一个无法解决的问题,在某个时间点上,你显然必须知道,至少在一小段时间内。这是web服务器接收cookie和PHP脚本退出之间的时间。理论上,如果某个拥有root访问权限的人在这段时间内正在读取进程内存,那么他也应该知道这个秘密。但是,这是你真的不能阻止的。

但是,只要信息永远不会存储在任何地方(甚至不在会话中),它就应该是相当安全的。

当然,所有这些都假设您站点上的登录页面(最好是全部)至少是通过https://提供的,并且您使用TLS/SSL与邮件服务器进行通信。否则,您将面临更多微不足道的攻击。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14293815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档