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

时间:2017-01-11 11:30:09

标签: c# sql-server security 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;
}

我正试图避免将数据暴露给某些内存分析病毒/黑客/转储等。 Walmart memory hack并尽可能保证整体安全。

1 个答案:

答案 0 :(得分:0)

如果字符串以未加密的方式存储在数据库中,则无论如何都很容易被盗。

如果使用DataReader在内存中读取它们,即使在浏览器中循环一段时间,它们也会在内存中未加密。

我的建议是,如果字符串如此敏感,将它们加密存储在数据库中,使用DataReader将加密的字符串读入SecureString,然后根据需要解密它们;这不会将它们暴露在内存中。