Javascript 密码哈希(非SSL)

Javascript 密码哈希(非SSL),javascript,security,authentication,encryption,Javascript,Security,Authentication,Encryption,在非ssl传输的情况下,如何将密码从浏览器发送到服务器 在发送之前,我想使用bcrypt对密码+salt进行散列。。。。但似乎没有bcrypt算法的javascript实现 md5、SHA-1足够好吗 注:我的网站不存储任何用户个人信息。。我只是希望用户预期的密码不会被黑客攻击,因为用户可能在其他包含他/她的个人信息的网站上使用相同的密码。老实说,您可以在前端对其进行哈希处理,但这不会解决您的潜在问题。由于您将存储散列以供以后验证,因此黑客只需知道散列值是什么。然后黑客可以将散列值发送给您,您的

在非ssl传输的情况下,如何将密码从浏览器发送到服务器

在发送之前,我想使用bcrypt对密码+salt进行散列。。。。但似乎没有bcrypt算法的javascript实现

md5、SHA-1足够好吗


注:我的网站不存储任何用户个人信息。。我只是希望用户预期的密码不会被黑客攻击,因为用户可能在其他包含他/她的个人信息的网站上使用相同的密码。老实说,您可以在前端对其进行哈希处理,但这不会解决您的潜在问题。由于您将存储散列以供以后验证,因此黑客只需知道散列值是什么。然后黑客可以将散列值发送给您,您的系统会将其验证为正确的值。您实际上是在向系统发送未加密的密码

为了有效,传输需要通过SSL进行加密

实际上,绕过散列问题的简单方法是只玩。因为它没有使用SSL,所以使用浏览器的人无法知道HTML内容不是来自您的服务器。攻击者只需将其代码定位在客户端和服务器之间,并在HTML中添加其他代码以记录密码。然后,发布的信息会传递给攻击者;他或她获取所需信息(在本例中为密码),然后将信息转发到服务器。您和攻击者都不会知道彼此没有通信

这就是您必须从可验证来源购买证书的原因。他们正在验证与您通信的服务器是否是他们所说的服务器


相关:

您的方法似乎非常不安全。但是为了回答你的问题

  • 与通过SSL发送的方式相同,只是未加密
  • 不,MD5还不够好,即使是通过SSL。如果你真的担心安全性,那么为什么你会选择一个破解的算法呢
  • 即使在发送密码之前先对密码进行散列,也可以在客户端执行此操作。这意味着您的散列和算法将向每个最终用户公开和显示。因此,一个富有的黑客现在确切地知道你是如何发送密码的

  • 最后,如果您想在从客户端到服务器的传输过程中保护您的站点/文本,只需从GoDaddy获得至少20美元的SSL证书。在将密码存储到数据库之前,请先在服务器端对密码进行加密。

    我始终建议人们尽可能使用SSL,但为了完整性,应注意,通过仔细实施SSL,可以在没有SSL的情况下安全地执行身份验证

    您必须确保在HMAC中使用加密安全的哈希算法(我建议使用SHA-224或更好),并且您必须记住,尽管您可以通过这种方式进行身份验证而不泄露密钥/密码,但您的数据仍然必须以明文传输,因此,这不能代替SSL进行信用卡交易等。

    Hmmm

    挑战响应协议在这里可以工作

    客户端获取登录页面
    1) 启动会话
    2) 生成会话密钥
    3) 将会话密钥作为哈希目标发送
    用户登录,按提交
    1) 会话密钥的Javascript任务SHA-1+密码的SHA-1,将结果写入密码字段
    2) Javascript子表单
    3) 服务器获取会话密钥+SHA-1密码哈希的SHA-1并进行比较

    会话密钥是防止窃听者重播流的关键。服务器记得它是什么

    但是,密码的SHA1应该使用salt。简单地使用用户名可能足以阻止预构建的rainbow表工作。因为盐会暴露在这个协议中,所以你不能完全击败彩虹表

    编辑:回想起来,我没有说清楚一件事。我所说的会话id不是PHP会话id。它是存储在会话变量中的额外id,并以表单形式传递给客户端。它需要用于身份验证一次,并从PHP会话变量afterwords中丢弃。同样,嗅探器可以在该点之后劫持会话

    请记住,所有这些问题都是为了保护密码免受嗅探器的攻击。他自己的网站对任何能够嗅探和劫持会话的人来说都是非常脆弱的,他知道这一点


    大肥肉警告:MITM攻击者可以将javascript代码替换为其他操作,如向其提供密码副本。只有SSL可以防止此攻击。

    也许您可以尝试实现APOP命令

    根据您正在做的事情,您可能能够卸载对openid的身份验证。

    +1真正的SSL加密+明文传输的密码。在后端散列。散列值总是不同的,这就是为什么要添加一点盐。SSL不是唯一的解决方法。@Ishtar这没有帮助。如果你真的要使用auth用户表中的散列,你需要在它进行散列之前把它放到浏览器中。。。这意味着现在您只是实现了质询/响应身份验证,但非常糟糕(仍然容易受到重播攻击)。如果你不知道自己在做什么,这真的不是一个可以胡闹的地方。:)@伊什塔,那不是真的。哈希值必须是可复制的,以便与存储的值进行比较。问题在于散列值未加密发送。我不需要验证密码,我需要这个实例中的哈希值,因为它是未加密发送的。@Ishtar what??不,散列不是这样工作的。添加salt是一种防止基于rainbow表的攻击破解散列的方法。@Rook:您需要一个单独的安全(或足够安全)的某种形式的通道,我链接到的Wikipedia文章对此进行了解释