如何将用户输入的密码存储在内存中,并在不再需要时安全地擦除它?
为了详细说明,目前我们有以下代码:
username = raw_input('User name: ') password = getpass.getpass() mail = imaplib.IMAP4(MAIL_HOST) mail.login(username, password)
调用该login方法后,我们该怎么办才能用乱码填充包含密码的内存区域,以使某人无法通过执行核心转储来恢复密码?
login
可以用Python完成吗?
Python对内存的控制没有那么低。接受它,继续前进。在 最好的 ,你可以做的是del password调用后mail.login,这样的口令字符串对象的引用依然存在。任何声称能够做得更多的解决方案,只会给您一种错误的安全感。
del password
mail.login
Python字符串对象是不可变的。创建字符串后,没有直接方法可以更改它的内容。 即使 您能够以某种方式覆盖所引用的字符串的内容(在password愚蠢的ctypes技巧上,这在技术上是可行的),仍然会有在各种字符串操作中创建的其他密码副本:
password
您将不得不以某种方式获取所有这些字符串的引用,并覆盖它们的内存。