传递凭证的正确方法

问题描述 投票:0回答:1

在我的 WPF 桌面应用程序中,我有一个登录窗口,它调用服务器上需要凭据的方法,并传递凭据类:

public class CredentialsEntity
{
    public string UserName { get; private set; } = "";
    public string Password { get; private set; } = "";

    public CredentialsEntity(string userName, string password)
    {
        UserName = userName;
        Password = password;
    }
}

我的问题:

UserName
Password
可以以纯文本形式传递到服务器吗?如果没有,那么我应该在发送课程之前对它们进行加密吗?

谢谢

c# authentication encryption
1个回答
0
投票

可以吗?正如 Dai 所说,如果您保证应用程序的所有生产版本都使用 HTTPS,那么是的,“没问题”。

由于传输层是安全的,因此主要关注的是日志记录。您需要确保该对象作为 POST 主体发送,而不是编码为 URL 参数,因为 URL 通常由服务器记录,而请求主体通常不记录。如果您有自己的中间件来记录请求主体(就像我一样),那么您需要一种方法来确保在记录之前将密码屏蔽为 ***** 或其他内容。

如果您的客户端和服务器关于密码如何散列的问题位于同一页面上,那么您可能会更好 - 在这种情况下,只需在发送之前对密码进行客户端散列即可。这确保了即使无意中记录了某些内容,它也不会是用户的真实密码,而只是哈希值。

最后,如果您确实愿意,您可以使用非对称方案来加密密码,其中服务器广播您用于加密密码的公钥,然后服务器在收到时对其进行解密。不过,除了再次击败任何潜在的服务器端日志记录之外,我不知道您通过 TLS 能获得什么好处。

在浏览器调试器中查看您访问的最安全的网站(银行等),看看它们做了什么。他们几乎总是以纯文本形式发送凭据。业界似乎认为 HTTPS 就足够了,他们可能是对的。但如果你想采取额外的措施,我认为没有人会责怪你。

© www.soinside.com 2019 - 2024. All rights reserved.