从数据库转移到本地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并尽可能保证整体安全。
答案 0 :(得分:0)
如果字符串以未加密的方式存储在数据库中,则无论如何都很容易被盗。
如果使用DataReader在内存中读取它们,即使在浏览器中循环一段时间,它们也会在内存中未加密。
我的建议是,如果字符串如此敏感,将它们加密存储在数据库中,使用DataReader将加密的字符串读入SecureString,然后根据需要解密它们;这不会将它们暴露在内存中。