将字符串从数据库转换为 SecureString

Convert string from database to SecureString

当从数据库传输到本地 SecureString 变量时,如何限制(内存)存储在数据库中的未加密字符串的暴露?

字符串从数据库到达之后,但在转换之前,是否就像将其移动到字符串变量然后进行转换一样容易受到攻击?还有其他方法可以解决这个问题吗?

这是从 MSSQL 数据库获取数据的代码,数据存储为未加密的 varchar:

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;
}

我试图避免将数据暴露给某些内存分析 virus/hacks/dumps 等。例如Walmart memory hack 并尽可能确保整体安全。

如果字符串未加密存储在数据库中,它们无论如何都容易被盗。

如果使用 DataReader 在内存中读取它们,即使在您循环 reader.

时,它们也会在内存中未加密,即使只是一小会儿

我的建议是,如果字符串非常敏感,将它们加密存储在数据库中,使用 DataReader 将加密的字符串读入 SecureString,然后根据需要对其进行解密;这不会在内存中公开它们。