Я очень удивлен, что этот вопрос подробно не обсуждался:
В этой статье рассказывается, как использовать windbg для вывода в память запущенных строк процесса .Net.
Я потратил много времени на изучение класса SecureString, который использует неуправляемые закрепленные блоки памяти и также хранит данные в зашифрованном виде.Отличный материал.
Проблема возникает, когда вы используете его значение и присваиваете его свойству SQLConnection.ConnectionString, которое имеет тип System.String.Что это значит?Ну ...
- Он хранится в виде обычного текста
- Сборщик мусора перемещает его, оставляя копии в памяти
- Его можно прочитать с памятью windbgdumps
Это полностью отрицает функциональность SecureString!
Кроме того, класс SQLConnection не наследуется, вместо этого я даже не могу свернуть свой собственный со свойством SecureString;Yay для закрытого источника.Yay.
Новый слой DAL находится в стадии разработки, но для новой основной версии и для стольких пользователей пройдет минимум 2 года, прежде чем каждый пользователь будет обновлен, другие могут остаться на старой версии бесконечно, так какпо любой причине.
Из-за частоты, с которой используется соединение, сортировка из SecureString не поможет, так как неизменные старые копии остаются в памяти до тех пор, пока не появится GC.Интегрированная безопасность Windows не подходит, так как некоторые клиенты не работают в доменах, а другие перемещаются и подключаются по сети.
Как защитить строку подключения в памяти, чтобы она не могласмотреть с windbg?