我目前正在为客户开发内部网站,根据密码管理我遇到了问题。用户必须登录才能访问该网站。我将手动管理新用户帐户的创建。例如,经理将向我提供他想要访问该网站的所有员工的列表。我将使用生成的密码(每个用户不同的密码)创建每个用户帐户,该密码仅在几天内有效。首次登录时,用户必须将密码更改为另一个密码。新密码将有一些要求(即长度,大写字母,其中有一个数字,......)。这很常见。
我的问题是,由于此应用程序将在网络(它是一个Intranet)中工作,我无法在客户端验证密码(客户端可以禁用Javascript,或者数据可以在网络上更改(即另外,我认为通过网络发送一个干净的密码是不安全的,所以我在发送到网络之前使用SHA-1在客户端散列密码。
我的问题是,由于服务器获取密码哈希值,因此无法验证长度或符合格式要求。
我正在使用C#和MVC 5框架,但我的问题更多的是设计问题,而不是编程问题。
对于长篇介绍感到抱歉,非常感谢您的回答
此致
皮尔
答案 0 :(得分:1)
另外,我不认为通过网络发送干净的密码是安全的,所以我在发送到网络之前使用SHA-1在客户端散列密码。
这不是必需的。
让我们看一下潜在的攻击向量:
数据包嗅探(窃听者)
可以查看网络流量的攻击者只需通过线路查看SHA-1即可。由于您没有对其进行腌制,因此您没有重播保护。这意味着攻击者可以重新使用SHA-1结果并进行身份验证。
单独使用SSL(无客户端哈希)将对抗此攻击。
中间人
可以MITM内容的攻击者可以在散列之前注入自己的代码来嗅探密码。
单独使用SSL(无客户端哈希)将对抗此攻击。
服务器端攻击者
如果有人可以将代码放到您的服务器上,那么无论如何都要搞砸了。
简而言之,就是使用SSL。不需要"预先哈希" ...