擦除python中变量使用的ram space,防止内存转储攻击
Erase ram space used by variable in python, prevent memory dump attack
正在 python 中寻找此问题的经过验证的解决方案。
我有这样的代码:
verySensitveData = "secret, big secret"
#useing verySensitveData in code
#not need it any more
del verySensitveData # now variable is unusable in later code
collected = gc.collect() #collected and removed
现在它应该在调用 gc 时从 RAM 中消失。
这是否会强制 OS 使用 GC 自动擦除 verySensitveData 变量使用的地址上的数据?
它应该永远消失了,没有 ram 内存转储可以检索变量 verySensitveData 中的数据吗?
没有。 gc.collect()
只会导致 Python 检查被引用但无法访问的对象(例如,两个对象相互引用,但没有其他对象)。它不会触发任何类型的内存清理。
如果让您的程序抵抗内存转储很重要,Python 不是编写它的正确语言。Python 很少保证数据将如何存储在内存中,并且很可能您处理的任何字符串在处理过程中都会在内存中复制,这可能会在内存中留下您的字符串的部分或完整副本。 Python 可能会重新使用该内存或稍后将其释放给 OS,但不会采取任何特殊措施来擦除它。
正在 python 中寻找此问题的经过验证的解决方案。
我有这样的代码:
verySensitveData = "secret, big secret"
#useing verySensitveData in code
#not need it any more
del verySensitveData # now variable is unusable in later code
collected = gc.collect() #collected and removed
现在它应该在调用 gc 时从 RAM 中消失。
这是否会强制 OS 使用 GC 自动擦除 verySensitveData 变量使用的地址上的数据?
它应该永远消失了,没有 ram 内存转储可以检索变量 verySensitveData 中的数据吗?
没有。 gc.collect()
只会导致 Python 检查被引用但无法访问的对象(例如,两个对象相互引用,但没有其他对象)。它不会触发任何类型的内存清理。
如果让您的程序抵抗内存转储很重要,Python 不是编写它的正确语言。Python 很少保证数据将如何存储在内存中,并且很可能您处理的任何字符串在处理过程中都会在内存中复制,这可能会在内存中留下您的字符串的部分或完整副本。 Python 可能会重新使用该内存或稍后将其释放给 OS,但不会采取任何特殊措施来擦除它。