Python - 释放/替换字符串变量,它是如何处理的?

Tor*_*xed 5 python security memory-management

假设我将密码以纯文本形式存储在一个名为passWd字符串的变量中.一旦我丢弃它,python如何释放这个变量(例如,用del passWdpassWd= 'new random data')?

字符串是否存储为字节数组意味着它可以在它最初存在的内存中被覆盖,或者它是一个无法修改的内存区域中的固定集合,并且在为新值指定新内存区域时是创建并旧区域被删除但不被null覆盖?

我在质疑Python如何实现内存区域的安全性,并希望了解更多信息,主要是因为我很好奇:)

从我到目前为止收集到的,使用del(或__del__)导致解释器不会自动释放该变量的内存区域,这可能会导致问题,而且我也不确定del在删除值时是如此频繁.但这只是我收集的内容,而不是黑色或白色的东西:)

我要问的主要原因是,我打算编写一个获取字符串的移交应用程序,执行一些I/O,将其传递给另一个子系统(例如,用于覆盆子pi的bootloader)并且接口是用Python(在某些人的耳朵里听起来多么奇怪......)并且我并不担心数据在I/O计算期间受到损害,但是在两个子系统切换之间可能会发生内存转储.或者,如果系统被冻结(比如说是一个hiberation)说系统启动后20分钟,我尽可能快地删除了变量,但不管怎么说,尽管我做了一个del passWd:) 它仍然在内存中

(Ps.我曾经问过超级用户,他们在这里提到我,我很抱歉语法很差!)

Ber*_*Ber 2

除非您使用自定义编码输入方法来获取密码,否则它将出现在更多位置,而不仅仅是您的不可变字符串。所以不用太担心。

操作系统应注意在将内存分配给另一个进程之前清除进程中的所有数据。如果页面被复制到磁盘(换出或休眠),这当然可能会失败。

安全的密码输入并不容易。也许您可以找到一个特殊的库或模块来处理这个问题。