【问题标题】:How to secure the password while it being sent using AJAX?如何在使用 AJAX 发送密码时保护密码?
【发布时间】:2013-12-31 04:42:32
【问题描述】:

我正在尝试保护用户密码的安全,但我注意到在提交表单时发送的标题信息对所有人都是可见的。它是安全的还是有办法保证它的安全?我知道如何在 JS 中将 md5 添加到密码中,但是 MD5 不再安全,我无法在 JS 中添加盐,因为每个人都可以找出盐是什么。那你建议怎么做?我想我的网站 (https://) 很快就会有 SSL,但我不确定,所以我需要另一种方法来保证通信安全。即使我有一个 SSL,所以它来自 HostGator 的商业计划,如果我没记错的话,SSL 不适用于移动设备。 (使用 AJAX 通过邮寄方式发送的表单)。

【问题讨论】:

  • 即使你在客户端加密,它仍然是 JS。任何人都可以看到你在做什么。
  • 是什么让您认为 SSL 在移动设备上不起作用?无论是通过 GET、POST、AJAX 还是它们的任意组合发送,除非通过 SSL 发送,否则它都是可读的。
  • @Bibhas 完全正确!这就是我要问的!如何保护发送本身,而不是当它已经在服务器中时?我猜这是一个强散列,即使黑客知道它是如何散列的,它也会在他们“在路上”到服务器时保证密码的安全,但我不知道 JS(或 JQ)中非常强的散列
  • @VladGincher,这就是传输层安全性(SSL 或 TLS)的用途。
  • @VladGincher:没有 SSL,你就不可能安全,句号。攻击者可以修改你的哈希码,首先将密码发送给他。您需要使用支持完整 SSL 的体面主机。

标签: javascript php jquery ajax security


【解决方案1】:

AJAX 无关紧要。

保护您的登录页面的唯一方法是使用 SSL 或 TLS,它们在现代移动浏览器上运行良好。

【讨论】:

    【解决方案2】:

    我还认为 HTTPS 已经在大多数移动浏览器中可用。但是,如果您确定它不在您的情况下,您可以考虑使用公钥密码学 js 库。 pidCrypt 浮现在脑海中。但在确实有必要的情况下,我认为在大多数情况下它是相当矫枉过正的。

    【讨论】:

    • 没有。不要不使用没有 SSL 的浏览器端加密。它将为您提供完全零安全性。
    • 澄清一下,如果没有 SSL,您无法阻止攻击者在运行中更改您的 JS 代码以首先向他发送明文副本。
    • 但您必须同意它比仅发送明文密码安全。至少你可以免受流量嗅探的影响。还是我什么都没看到?
    • @SimonPlus 你没有看到任何东西。服务器端接收明文密码和加密密码有什么区别?就服务器而言,加密的密码就是密码。因此,无论您获得的是明文还是加密版本,服务器都不关心。然而,用户可能对这两种情况有不同的感受。
    【解决方案3】:

    你可以从这里http://pajhome.org.uk/crypt/md5/sha512.html 下载sha512.js 然后声明一个这样的函数:

    function formhash(form, password)
    {
        $(form).append('<input name="p" type="hidden" >');
        var p = $('input[name="p"]');
        p.val(hex_sha512(password.val()));
        password.val('');
    
        return p.val();
    }
    

    所以之后您可以使用 ajax 将数据发送到您的服务器,例如:

    var dataObj = {
        'username': $('input[name="username"]').val(),
        'password': formhash($('.form-signin'), $('input[name="password"]'))
    }; 
    

    您的密码将被加密发送。当然,您也应该使用 https 来登录表单页面。

    【讨论】:

      【解决方案4】:

      移动应用程序和浏览器支持 SSL - 这不是您的问题。如果您的主机不支持 SSL,那么您需要将其关闭。

      客户端加密不会为您提供额外的安全性。它可能会为您的用户提供额外的安全性。

      所有可用于从客户端获取密码的攻击也可用于从客户端获取散列或加密密码 - 您的系统会排除该值,但不知道不是用户的浏览器生成它。因此,客户端加密不会为您的网站提供任何额外的安全性。

      如果您试图保护您的用户,则视角会有所不同。通过使用客户端加密,您可以提出您永远不知道用户密码的论点,从而在系统遭到破坏时保护用户。您的系统仍会受到威胁,但使用该密码的所有其他系统都不会受到威胁。

      对于身份验证机制,您需要传输层安全性,几乎没有办法绕过它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-05
        • 2011-02-01
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        相关资源
        最近更新 更多