【问题标题】:Avoid storing passwords in plaintext for IMAP access via Python避免以明文形式存储密码以通过 Python 进行 IMAP 访问
【发布时间】:2013-07-03 01:08:54
【问题描述】:

我正在尝试编写一个有助于清除 IMAP 收件箱的脚本,但我遇到了密码问题;即,要访问服务器,我需要访问明文。我检查过了,我的邮件服务器没有将 MD5 显示为可用方法(否则我可以使用IMAP4.login_cram_md5)。如何在没有明文密码的情况下访问服务器?

【问题讨论】:

    标签: python imap exchange-server imaplib


    【解决方案1】:

    您可以像这样检查可用的身份验证方法(我正在使用IMAP4_SSL,如果您想要不安全的连接,请使用IMAP4,但如果您可以选择,我不建议您使用非 SSL 连接) .

    import imaplib
    imap_server = imaplib.IMAP4_SSL("imap.server.com")
    print "\n".join(i for i in imap_server.capabilities if i.startswith("AUTH="))
    

    然后,您可以为您选择的方法编写一个可以传递给imap_server.authenticate() 的身份验证对象。 This bug report 恰好有一些使用示例,this SO question 显示有人通过 OAuth 对 Gmail 进行身份验证。

    如果服务器不提供除明文密码之外的任何身份验证方法,或者您不能/不希望支持它们,那么不幸的是,将密码存储在可以恢复明文的形式中是不可避免的。您可以以某种形式对其进行加密(例如使用PyCrypto 的AES,例如here),但加密密钥仍将存储在某处,除非您每次都想提示用户(在这种情况下,您不妨只是仍然提示输入密码)。我建议至少进行一些琐碎的混淆,例如 Base64 编码,以防止有人无所事事地浏览代码或配置,从而清楚地看到密码。

    编辑: 另一点可能很明显是确保如果您确实需要存储纯文本密码,则永远不要将它们存储在需要全球可读的文件中。例如,永远不要在脚本中硬编码它们,即使它只是一个快速脚本,它的所有其他设置都是全局变量或类似的。相反,请尝试确保密码位于单独的文件中,该文件可以根据需要限制特定于操作系统的权限。

    【讨论】:

    • 不客气,抱歉我没有更好的解决方案给你。我只是在修改我的答案,还提到将密码保留在源代码之外(可能很明显,但我认为足够重要)。
    • 欣赏;我现在已经在这样做了。什么是最佳实践。将这些文件放在 git repos 中(当然不是公开的)?
    • 在 Git 存储库中存储密码?好吧,最佳 做法是“不要”。如果可能的话,让它成为一个永远不会离开当前机器的本地配置。如果需要,您始终可以在 Git 中使用虚拟默认值,并在每次结帐时使用真实密码进行本地未提交的更改 - 您始终可以将其隐藏以进行其他工作并在之后取消隐藏。如果您确实必须将密码存储在 Git 中,请确保它至少经过简单加密(例如 Base64)并保存在自己的文件中。避免与任何其他更改一起提交对该文件的更改。
    猜你喜欢
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多