2015-04-22 39 views
1

我们使用的是Asp.net身份验证(当前版本为2)。为了本地用户身份验证的目的,框架需要明文密码。据我所知,这不是传输密码的安全方法。如何在Asp.net身份登录时输入密码

一个快速的答案可以是:使用SSL来加密密码传输,但这不是一个可行的解决方案给大家。

这是我们认为的: 登录表单提供了一次性随机令牌,然后它将密码散列,并将其附加到令牌并再次散列。结果被发送到服务器。 服务器具有密码和随机令牌的散列,将它们连接在一起,如果它们的散列等于客户端发送的内容,则继续登录过程。

这对于Asp.net标识提供的当前api是不可能的:它期望原始密码。

我们该怎么办?仅依赖于ssl?有没有一种方法来确保没有SSL的密码传输?

+2

为什么SSL不是一个可行的解决方案?以明文方式传输密码或使用伪劣哈希算法甚至可以降低可行性。 – DGibbs

+2

SSL/TLS是您的最佳选择。其他选择是浪费时间和安全漏洞。 – oleksii

+1

在你的实现描述中,我可以看到至少有一个安全漏洞:你的来自客户端的散列基本上变成了密码,你需要自己保护它。请不要自己做密码学 - 你不会这样做。要么使用SSL,要么你的客户将不得不通过http将其吸收并转移密码 - 如果他们无法承担使用SSL的托管服务(你可以获得这些天的免费证书) – trailmax

回答

4

网络依靠https来保护密码等敏感信息。我会说遵循标准。您的哈希算法不像几十年的https开发那样经过验证。

+0

是的,但考虑一个网站模板,许多人,尤其是小型企业/个人,他们没有或不在乎https。我真的很喜欢我的代码给他们一些保护,即使没有ssl它是不完整的。他们呢? – Alireza

+2

@Alireza由于您拥有系统的登录功能,我猜你还有一些可能包含敏感信息的个人数据或其他形式的交易,如果实施者选择不使用https,那么这些信息都不会被保护。网络上的趋势是将这些日子的所有东西放在后面,即使是“简单”的文本网站。 – Cros