首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetworkCredentials以纯文本公开密码。

NetworkCredentials以纯文本公开密码。
EN

Stack Overflow用户
提问于 2015-09-23 12:47:09
回答 2查看 9.6K关注 0票数 3

我将在我的C#/WPF应用程序中创建一个身份验证模块。要对用户进行身份验证,我希望使用NetworkCredential来存储凭据。

代码语言:javascript
复制
Credential = new NetworkCredential(credential.UserName, credential.Password);

其中credential.UserNamestringcredential.PasswordSecureString类型。调试应用程序时,我可以看到纯文本和安全字符串中的密码。

为什么密码公开为纯文本?这不是可能的安全威胁吗?

谢谢你的回答。

编辑:

为了记录在案,将在WCF客户端上使用NetworkCredential对象,如下所示:

代码语言:javascript
复制
client.ClientCredentials.Windows.ClientCredential = Credentials
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-23 13:07:05

NetworkCredential类在内部存储密码作为SecureString

代码语言:javascript
复制
 public string Password {
        get {
            ExceptionHelper.UnmanagedPermission.Demand();
            return InternalGetPassword();
        }
        set {
            m_password = UnsafeNclNativeMethods.SecureStringHelper.CreateSecureString(value);
        }
    }

当某人需要以纯文本的形式检索密码时(在某一时刻,无论是从这个类还是在链的更远的某个地方),它都是从安全字符串检索它。

代码语言:javascript
复制
    internal string InternalGetPassword() {
        string decryptedString = UnsafeNclNativeMethods.SecureStringHelper.CreateString(m_password);
        return decryptedString;
    }

当使用调试器时,它将显示属性,因此从SecureString中检索该值。

票数 14
EN

Stack Overflow用户

发布于 2015-09-23 12:59:34

SecureString与加密无关!(过于简单化--可能也是加密的,但在这里并不那么重要;如果您从普通的SecureString创建string,那么您已经否定了SecureString的大量收益--短期而言)

它只是一个可以决定性地解除分配的字符串。出于安全考虑,这一点很重要,因为.NET字符串可能寿命很长(对于内部字符串,整个应用程序的生命周期)。

NetworkCredential不是用来存储凭证的--它只是一个简单的旅行车,可以让它们到达目的地--基本上是一个通用的API。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32740040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档