使用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()
有没有什么建议可以让我完全从记忆中抹去敏感性
你需要打电话给garbace催收员
gc documentation
显然,在Python中没有真正的方法来实现这一点,因为字符串对象是不可变的。到处都有对这些字符串的引用。最好的方法是del和gc.collect()。如本link中所述,“接受它,或者继续前进。其他任何东西都会给你一种虚假的安全感”
相关问题 更多 >
编程相关推荐