【发布时间】:2015-12-20 19:10:12
【问题描述】:
我即将在我的 C#/WPF 应用程序中创建一个身份验证模块。为了对用户进行身份验证,我想使用 NetworkCredential 来存储凭据。
Credential = new NetworkCredential(credential.UserName, credential.Password);
其中credential.UserName 是string,credential.Password 是SecureString 类型。在调试应用程序时,我可以看到纯文本和安全字符串中的密码
为什么密码显示为纯文本?这不是可能的安全威胁吗?
感谢您的回答。
编辑:
作为记录,NetworkCredential 对象应在 WCF 客户端上使用,如下所示:
client.ClientCredentials.Windows.ClientCredential = Credentials
【问题讨论】:
-
这不是可能的安全威胁吗?如果您正在调试,您可以在运行时检查它吗?您可以在运行时使用附加的调试器执行大多数操作。
-
@JayMee 我认为关键是因为
NetworkCredential在构造函数中采用了SecureString,所以它不应该立即将其作为纯文本属性公开给它自己,以及任何其他人看着。 “感谢您将这些安全信息传递给我。大家好,看看这个!” -
@JayMee 不,我是说
NetworkCredential不应该采用SecureString,获取它的价值并将其作为普通String公开。如果要这样做,传递SecureString有什么意义?我也是——我只是(希望如此!)稍微澄清一下这个问题...... -
@JayMee 问题是,为什么会有
SecureString SecurePassword和string Password。如果您可以从Password获得其实际值,SecurePassword似乎不太安全。这是违反直觉的。 -
@sab669,因为 Password 属性是代码而不是数据。数据包嗅探器检查数据,但不执行代码;确实在数据包中没有密码属性/代码供嗅探器执行,只有数据,并且密码属性不在数据包数据中。