4

我正在为我工​​作的公司开发一个管理面板,并且想知道一些事情。我想增加员工的经验。我希望他们能够通过输入登录凭据连接到他们的电子邮件,然后在管理面板中阅读电子邮件。我需要帮助的是:

如果我建立 imap_open 连接,我需要纯文本密码(据我所知)。我无法安全地将密码保存在数据库中,因为我知道如果黑客掌握了数据将是一场灾难。

基本上,我想:

  • 使用ENCRYPTED密码创建 imap_open 连接。最好作为 bcrypt。

你们中有人知道怎么做吗?我在谷歌上搜索过,甚至在 stackoverflow 上看到了其他一些问题,但我似乎找不到问题的答案。我永远不会将密码保存为纯文本。并且仅使用 COOKIE 或 SESSION 似乎很麻烦.. 管理员一直登录到他们的电子邮件,而我想要的只是在登录时为适当的管理员帐户加载电子邮件。

4

3 回答 3

1

如果我理解正确,您想要:

  • 将用户的密码安全地存储在他们的机器上
  • 用它来连接邮件服务器
  • 下载电子邮件

以明文形式存储用户密码显然是禁忌。有不同的方法可以处理这个问题。应用程序实际上可以向用户请求密码,这是一个简单但不太方便的解决方案。

通常密码是使用单向散列方案(如 SHA256 或 bcrypt)存储的,但这意味着您只能检查密码是否与它们匹配;您无法检索密码并将其发送到其他地方。所以你必须求助于对称密钥加密。您将加密的密码存储在某个地方(在数据库中),当您需要它时,您可以检索它、解密它并通过您的 IMAP 连接发送它。加密的问题在于它依赖于密钥,该密钥可能会在某些时候受到损害,但如果您需要检索它,则不能选择散列。

另一件需要注意的事情是以明文形式发送密码的风险。如果您的服务器使用 SSL,这将非常小心。

于 2014-04-27T17:56:43.757 回答
-1

是的,当然 AUTHENTICATE PLAIN 对密码进行编码。但是支持管理员访问的服务器允许您对管理员密码和用户名进行编码,以便您可以访问用户的帐户。

$login_str = sprintf("%s\x00%s\x00%s", $user_name,$admin_name,$admin_pwd);

$login_str = encode_base64("$login_str", "");

当您在 AUTHENTICATE PLAIN 登录中使用编码字符串时,您将获得对用户帐户的访问权限。而且您不需要用户的密码。

如果您使用 AUTH PLAIN 执行此操作...

sprintf("%s\x00%s\x00%s", $user_name,$user_name,$user_pwd);

然后您可以访问用户的帐户。但是提供管理员凭据似乎可以在不存储密码的情况下完成 OP 想要做的事情。

于 2014-04-28T20:13:32.047 回答
-2

如果您的 IMAP 服务器通过 AUTHENTICATE PLAIN 支持管理员登录,那么您不需要用户的密码来访问他的邮箱。

许多 IMAP 服务器都支持这一点,例如 Dovecot、CommuniGate、Zimbra,我想不到三个。

于 2014-04-27T18:17:36.223 回答