Преобразовать строку из базы данных в SecureString

Как я могу ограничить (в памяти) доступ к незашифрованной строке, хранящейся в базе данных, при передаче из базы данных в локальную SecureString переменная?

Является ли строка после того, как она поступила из базы данных, но до того, как ее преобразовали, столь же уязвима, как просто переместив ее в строковую переменную и затем преобразовав ее? И есть ли другой способ пойти по этому поводу?

Вот код, получающий данные из базы данных MSSQL, где они хранятся в незашифрованном виде:

SecureString str = ((string)command.Parameters["@ssn"].Value).ConvertToSecureString();

куда ConvertToSecureString() этот метод расширения:

public static SecureString ConvertToSecureString(this string str)
{
   var secureStr = new SecureString();
   if (str.Length > 0)
   {
       foreach (var c in str.ToCharArray()) secureStr.AppendChar(c);
   }
   secureStr.MakeReadOnly();
   return secureStr;
}

Я пытаюсь предотвратить раскрытие данных для некоторых вирусов / хаков / дампов профилирования памяти и т. Д. Например, взломать память Walmart и просто быть максимально безопасным в целом.

1 ответ

Решение

Если строки хранятся в базе данных в незашифрованном виде, они все равно уязвимы для кражи.

И если они читаются в памяти с помощью DataReader, они также будут в памяти незашифрованными, даже если только ненадолго, пока вы просматриваете ридер.

Мой совет будет, если строки настолько чувствительны, хранить их в зашифрованном виде в БД, читать зашифрованные строки в SecureString с помощью DataReader, а затем расшифровывать их по мере необходимости; это не будет выставлять их в памяти.

Другие вопросы по тегам