Недавно я проводил проверку кода безопасности для своей компании и использовал инструмент под названием Fortify360. Он идентифицирует многие проблемы с кодом и описывает проблемы. Интересная проблема, которую я поднял, что я не нашел никакой другой информации, заключается в следующем:
"Чувствительные данные (например, пароли), хранящиеся в памяти, могут быть утечки, если они хранятся в управляемом объекте String. Объекты String не закрепляются, поэтому сборщик мусора может перемещать эти объекты по своему желанию и оставлять несколько копий. в памяти. Эти объекты по умолчанию не зашифрованы, поэтому любой, кто может прочитать память процесса, сможет увидеть содержимое. Кроме того, если память процесса будет выгружена на диск, незашифрованное содержимое строки будет записано в файл подкачки. Наконец, поскольку объекты String являются неизменяемыми, удаление значения String из памяти может быть выполнено только сборщиком мусора CLR. Сборщик мусора не требуется для запуска, если в CLR недостаточно памяти, поэтому нет никакой гарантии относительно того, когда будет происходить сборка мусора. В случае сбоя приложения дамп памяти приложения может выявить конфиденциальные данные. "
Все это, как я понимаю, имеет смысл, и в моем исследовании проблемы это довольно стандартно.
Вопрос: как мне решить проблему? Предположим, что рассматриваемый класс или классы не могут наследоваться от iDisposable (очень большое приложение, и этот класс нужен еще долго после рассматриваемой строки). Есть ли альтернативный способ ручного управления памятью для удаления определенной строки без вызова сборщика мусора, GC.Collect () ??
Заранее признателен за помощь.
Alex