我将在我的C#/WPF应用程序中创建一个身份验证模块。要对用户进行身份验证,我希望使用NetworkCredential来存储凭据。
Credential = new NetworkCredential(credential.UserName, credential.Password);其中credential.UserName是string,credential.Password是SecureString类型。调试应用程序时,我可以看到纯文本和安全字符串中的密码。

为什么密码公开为纯文本?这不是可能的安全威胁吗?
谢谢你的回答。
编辑:
为了记录在案,将在WCF客户端上使用NetworkCredential对象,如下所示:
client.ClientCredentials.Windows.ClientCredential = Credentials发布于 2015-09-23 13:07:05
NetworkCredential类在内部存储密码作为SecureString
public string Password {
get {
ExceptionHelper.UnmanagedPermission.Demand();
return InternalGetPassword();
}
set {
m_password = UnsafeNclNativeMethods.SecureStringHelper.CreateSecureString(value);
}
}当某人需要以纯文本的形式检索密码时(在某一时刻,无论是从这个类还是在链的更远的某个地方),它都是从安全字符串检索它。
internal string InternalGetPassword() {
string decryptedString = UnsafeNclNativeMethods.SecureStringHelper.CreateString(m_password);
return decryptedString;
}当使用调试器时,它将显示属性,因此从SecureString中检索该值。
发布于 2015-09-23 12:59:34
SecureString与加密无关!(过于简单化--可能也是加密的,但在这里并不那么重要;如果您从普通的SecureString创建string,那么您已经否定了SecureString的大量收益--短期而言)
它只是一个可以决定性地解除分配的字符串。出于安全考虑,这一点很重要,因为.NET字符串可能寿命很长(对于内部字符串,整个应用程序的生命周期)。
NetworkCredential不是用来存储凭证的--它只是一个简单的旅行车,可以让它们到达目的地--基本上是一个通用的API。
https://stackoverflow.com/questions/32740040
复制相似问题