在python中完全清除内存中的对象

2024-10-01 07:42:15 发布

您现在位置:Python中文网/ 问答频道 /正文

使用python时,我遇到了一个有趣的问题:我的脚本读取一些敏感信息,我希望数据一经使用就被彻底清除。比如:

try:
    useData(sensitiveString)
except:
    print("There was a problem executing useData()")
finally:
    scrubFromMemory(sensitiveString) 

这是为了最大限度地减少即使在发生错误的情况下,仍然驻留在内存中的sensitiveString的可能性。 我考虑过改变字符串,比如:

sensitiveString = "*" * (len(sensitiveString)-1)  # does this overwrites memory, or creates a new object?
sensitiveString = "*" * 10000  # sensitive string is guaranteed to be relatively short
del sensitiveString
gc.collect()

但我在某处读到,在python中(由于c实现),对字符串的修改将导致在内存中创建一个新的字符串对象。因此,原始的sensitiveString仍然可以“ghost”存在于应用程序的内存转储中。我想避免这样。 编辑:typo-gc.collect()而不仅仅是gc()

有没有什么建议可以让我完全从记忆中抹去敏感性


Tags: 数据内存字符串脚本信息gccollectthere
2条回答

你需要打电话给garbace催收员

gc documentation

gc.collect()

显然,在Python中没有真正的方法来实现这一点,因为字符串对象是不可变的。到处都有对这些字符串的引用。最好的方法是del和gc.collect()。如本link中所述,“接受它,或者继续前进。其他任何东西都会给你一种虚假的安全感”

相关问题 更多 >