小编典典

安全擦除内存中的密码(Python)

python

如何将用户输入的密码存储在内存中,并在不再需要时安全地擦除它?

为了详细说明,目前我们有以下代码:

username = raw_input('User name: ')
password = getpass.getpass()
mail = imaplib.IMAP4(MAIL_HOST)
mail.login(username, password)

调用该login方法后,我们该怎么办才能用乱码填充包含密码的内存区域,以使某人无法通过执行核心转储来恢复密码?

可以用Python完成吗?


阅读 210

收藏
2020-12-20

共1个答案

小编典典

Python对内存的控制没有那么低。接受它,继续前进。在 最好的 ,你可以做的是del password调用后mail.login,这样的口令字符串对象的引用依然存在。任何声称能够做得更多的解决方案,只会给您一种错误的安全感。

Python字符串对象是不可变的。创建字符串后,没有直接方法可以更改它的内容。 即使
您能够以某种方式覆盖所引用的字符串的内容(在password愚蠢的ctypes技巧上,这在技术上是可行的),仍然会有在各种字符串操作中创建的其他密码副本:

  • 由getpass模块在将结尾的换行符从输入的密码中删除时
  • 由imaplib模块引用密码时,然后创建完整的IMAP命令,然后将其传递给套接字

您将不得不以某种方式获取所有这些字符串的引用,并覆盖它们的内存。

2020-12-20