Безопасность кучи памяти: Сборка мусора строк

Я недавно проводил проверку кода безопасности для своей компании и использовал инструмент под названием Fortify360. Он определит многие проблемы с кодом и опишет проблемы. В нем был поднят интересный вопрос, по которому я не нашел никакой другой информации:

«Конфиденциальные данные (например, пароли), хранящиеся в памяти, могут просочиться, если они хранятся в управляемом объекте String. Объекты String не являются закреплены, поэтому сборщик мусора может перемещать эти объекты по своему усмотрению и оставлять несколько копий в памяти. Эти объекты не зашифрованы по умолчанию, поэтому любой, кто может прочитать процесс » память сможет увидеть содержимое. Более того, если память процесса выгружается на диск, незашифрованное содержимое строки будет записано в файл подкачки. Наконец, поскольку объекты String неизменяемы, удаление значения String из памяти может быть выполнено только сборщиком мусора CLR. Сборщик мусора не требуется запускать, если в среде CLR не хватает памяти, поэтому нет гарантии, когда произойдет сборка мусора. В случае сбоя приложения дамп памяти приложения может раскрыть конфиденциальные данные ».

Я понимаю, что все это имеет смысл, и в моем исследовании проблемы довольно стандартно.

Вопрос в следующем: как решить проблему? Предположим, рассматриваемый класс или классы не могут наследовать от iDisposable (очень большое приложение, и класс нужен намного позже рассматриваемой строки). Есть ли альтернативный способ ручного управления памятью для удаления определенной строки без вызова сборщика мусора, GC.Collect () ??

Заранее оцените помощь.

Alex

7
задан Alex McKay 15 November 2010 в 20:46
поделиться