在起始页面检查客户端密码是否安全?

时间:2016-04-22 10:16:12

标签: security encryption hash client-side

启动Web应用程序通过javascript检查硬编码哈希密码的密码是否安全?

即:

if (md5HashFunction(password) === '4c98fecb7fdbf0c3b848f95c92c3402e') {
    alert('you are admin');
    window.location.href=window.location.href+'/'+password;
}

攻击者是否有任何方法可以找到符合条件的密码/找出管理路径网页? (www.sample.com/realpassword

2 个答案:

答案 0 :(得分:4)

不,这不安全。客户端验证永远不会安全。以下是一些原因:

  1. 您正在发布哈希值。这意味着攻击者知道密码何时被更改(或者没有)并且可以脱机而不是针对服务本身进行破解。

  2. MD5不应再用于密码了。它很脆弱,已知问题,并且与其他所有哈希相比都很容易破解。我可以直接谷歌搜索这个哈希并获取你的密码(colibri)http://md5decoder.org/4c98fecb7fdbf0c3b848f95c92c3402e

  3. 您正在将密码作为网址路由的一部分。这可能会带来新的弱点。例如,如果我可以强制您的服务出错并转储一些有关路由不匹配的信息。或者,如果路由匹配代码允许定时攻击以发现可能的路由。

  4. URL中的密码将保存在浏览器历史记录中,这与用户可以控制的表单密码不同。这样,任何有权访问您的浏览历史记录的人都可以获取它。

  5. 密码现在是服务路由的一部分,这意味着人们会复制/粘贴它,并可能在其他地方公开它。甚至可能是google索引的地方。

  6. 会有更多的可能性......不要做。

答案 1 :(得分:-1)

似乎在起始页面中检查密码哈希是一个坏主意。

对于这个问题,更安全的身份验证协议通常会跳过一些箍,以确保通常允许客户端选择一堆随机位,这样的重放攻击无法正常工作用密码,也可以清楚地提交给服务器。

在服务器上:

  • 生成一些随机的
  • 将这些位(以明文形式)发送到客户端

在客户端:

  • 生成一些随机位
  • 连接密码,服务器的随机位和客户端随机 位
  • 生成上述
  • 的哈希值
  • 提交随机数据(以明文形式)和哈希值到服务器

由于服务器知道自己的随机信息以及客户端的随机位(它将它们作为明文),它可以执行基本相同的转换。该协议确保在此对话中的任何人都可以使用该信息稍后使用所记录的信息进行错误验证(除非使用非常弱的算法......),只要双方每次都生成不同的“噪声位”,进行握手。

如果我是你,我会两次阅读this thread