Полностью стереть объект из памяти в python - PullRequest
0 голосов
/ 18 января 2020

Используя python, я столкнулся с интересной проблемой: мой скрипт считывает некоторую конфиденциальную информацию, и я хочу полностью очистить данные, как только они будут использованы. Что-то вроде:

try:
    useData(sensitiveString)
except:
    print("There was a problem executing useData()")
finally:
    scrubFromMemory(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) модификация строки приведет к созданию новой строки объект в памяти. Таким образом, исходная чувствительная строка все еще может существовать где-то в дампе памяти приложения. Я бы хотел этого избежать. РЕДАКТИРОВАТЬ: опечатка - g c .collect () вместо просто g c ()

Любые предложения, как я могу полностью очистить чувствительную строку из памяти?

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Хорошо, по-видимому, в Python нет реального способа сделать это, поскольку строковые объекты являются неизменяемыми. Ссылки на эти строки существуют повсеместно. Лучшее, что можно сделать, это del и g c .collect (). Как указано в этой ссылке , «примите это или двигайтесь дальше. Все остальное даст вам ложное чувство безопасности»

0 голосов
/ 18 января 2020

Вам необходимо вызвать сборщика мусора.

г c документация

gc.collect()
...