由于存储密码是不打算的,而且还需要重新输入密码多次也是不可取的,唯一的解决方案是这样的:
>使用足够长度的随机密钥加密密码(使用例如AES)
>将加密的密码和用户名存储在会话中
>加密用户名和邮件服务器也可能是错误的,以防万一。它不会受到伤害,而假定的攻击者在服务器上没有已知的用户名。
>将加密密钥存储在cookie中
这不是完美的,但它应该工作得很好,它可能是一个很好的权衡,你可以得到。
对于每个请求,用户的浏览器将发送cookie,PHP脚本可以使用cookie解密存储在会话中的数据,并在IMAP / POP服务器上执行请求。
有人利用您的服务器并访问会话存储将能够窃取加密的密码,但如果随机密钥的长度和随机质量都很好,这是非常徒劳的。
关键是,你只能真正保护一些你不知道的秘密。如果您有必要的信息来解密服务器上的一些信息(在这种情况下为IMAP密码),例如在会话存储中,那么利用服务器的每个人都可以这样做。无论加密程度如何,没有任何区别。
确保秘密保密的唯一方法是使用您不知道的东西进行加密,只有用户(或在这种情况下是用户的浏览器)才知道。
这导致了无法解决的问题,在某个时间点,你显然必须知道,至少要几分之一秒。这是接收cookie的Web服务器和退出的PHP脚本之间的时间。在理论上,如果有人访问root的人在那段时间里读过程记忆,他也会知道这个秘密。但唉,那是你真的无法预料的。
只要信息永远不会存储在任何地方(甚至在会话中),它应该是相当安全的。
当然,所有这些都假设至少您网站上的登录页面(最好是所有)通过https://提供,并且您使用TLS / SSL与邮件服务器进行通信。否则,你可以进行更多的微不足道的攻击。