Преобразовать строку из базы данных в 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, а затем расшифровывать их по мере необходимости; это не будет выставлять их в памяти.