避免将密码存储在纯文本中,以便通过Python进行IMAP访问

时间:2013-07-05 02:26:18

标签: python imap exchange-server imaplib

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

1 个答案:

答案 0 :(得分:3)

您可以检查可用的身份验证方法(我正在使用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编码,只是为了防止有人懒洋洋地看一眼代码或配置清楚看到密码。

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