【问题标题】:imap_open with encrypted password from databaseimap_open 使用来自数据库的加密密码
【发布时间】:2017-10-02 23:28:40
【问题描述】:

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

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

基本上,我想:

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

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

【问题讨论】:

  • 这怎么可能?
  • 我见过一个 PHP 应用程序,它对数据库中的 imap 密码进行加密,并在需要时对其进行解密。但是,查看代码,恶意用户可以解密您的密码!如果不是关键任务,您能不能要求输入密码并将其存储在内存中,直到任务完成?
  • 为什么不让他们输入密码来查看他们的电子邮件?我有一个应用程序,我必须在其中存储用户凭据。我使用非对称 RSA 加密。密码在发送给我之前在服务器端进行了加密,并在完全不同的服务器上解密以供以后使用。如果有人攻击 Web 服务器,除非他们跳转到我的应用服务器,否则他们不太可能恢复密钥。
  • 我想要的,基本上是在登录到他们的管理员帐户时显示管理员帐户的最近电子邮件,其中所有的管理操作都已完成(创建博客条目,编辑员工).. 我不想要他们已经登录到他们的管理员帐户后再次登录,因为这不是那么用户友好..
  • 如果您可以仅根据加密密码连接到邮件服务器,那么邪恶的黑帽攻击者也可以。攻击者无法恢复密钥,但也不需要。

标签: php imap imap-open


【解决方案1】:

如果我理解正确,你想:

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

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

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

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

【讨论】:

    【解决方案2】:

    是的,当然 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 想要做的事情,而无需存储密码。

    【讨论】:

    • ...以明文形式的单个密码为代价,该密码可以访问其他所有内容。您可以自行评估这种权衡在您的特定设置中是否有意义。
    • 再一次,这个答案完全无关紧要。这个问题要求某种加密。编码不是加密。就安全性而言,AUTHENTICATE PLAIN 与 LOGIN 一样好。
    【解决方案3】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2015-11-12
    相关资源
    最近更新 更多