【问题标题】:How to Post the password using ajax() function of jquery如何使用 jquery 的 ajax() 函数发布密码
【发布时间】:2010-09-23 06:16:50
【问题描述】:

我有一个密码文本框,其值为空。当用户点击它并输入密码时,文本框的onblur,密码将被更新到数据库中。

我已经使用 ajax 完成了这项工作,但我想知道此脚本中是否存在任何安全漏洞。恐怕我们从 ajax() 函数发送的数据可以使用一些黑客工具(如 FIREBUG)来更改。请给我一些建议。任何积分将不胜感激

我的代码如下:

//Code inside blursave() javascript function
    newName = $j('[name=abs]').val(); 
    var thedata = 'nam=' + newtval;
                   $j.ajax(
                            {
                                type: "POST",
                                url: "save.php",
                                data: thedata,
                                cache: false,
                                success: function(html)
                                {
                                    {
                                        $j("#update").empty();
                                        $j("#update").fadeIn("slow");
                                        $j("#flash").hide();
                                        //$j("#update").hide(2000);
                                        $j("[name=abs]").fadeOut(2000);
                                        $j("#update"). append(html);
                                        }
                                    }
                                 });

HTML 代码

<div id="flash"></div>
<div id="update"></div>
<div >
    <a href="#" id="edit">hello</a>
</div>
<div id="editbox" style="display: none">
    <input type="password" name="abs" id="abs" onblur="blurSave()">
</div>

【问题讨论】:

  • 您使用的是 HTTPS 协议吗?
  • 不,我没有使用 HTTPS 协议
  • 基本上,通过未加密的通道发送任何身份验证事务本身就是一个安全漏洞,主要来自上游数据包嗅探器。至于表单本身,只要 save.php 验证是否输入了密码,就会有一些最低限度的安全措施。

标签: php jquery html ajax security


【解决方案1】:

发出 Ajax 请求与标准浏览器请求没有太大区别。无论您是否使用 Ajax,您都可以使用 Firebug 等开发工具进行操作。

在这种情况下,您的应用程序的安全性在很大程度上取决于两件事,这两件事都与 Ajax 无关。

  1. 您的后端。如果您的 PHP 后端是安全的,那么请求是 Ajax 还是普通浏览器请求都没有关系。这意味着您需要检查输入卫生等事项以保护自己免受注射。

  2. HTTPS。无论您的后端有多安全,除非您使用 HTTPS,否则它可能没有任何意义。如果不这样做,密码将以纯文本形式从客户端发送到服务器,这样任何人都可以相对轻松地“嗅探”它。同样,无论您是否使用 Ajax,这都是一样的。

【讨论】:

    【解决方案2】:

    我的建议是:不要believe 存储在 javascript、cookie 或用户可以访问的任何其他本地存储中的任何数据。所有安全问题都必须在服务器端维护,并且本地数据的任何更改(例如,我不是指 session id,因为很难知道有效的 sid 来破解它)不得授予更多权限或访问受保护的数据。在您的情况下 - 当用户在 ajax 调用中更改数据时会发生什么? newtval 变量中有什么?

    【讨论】:

      【解决方案3】:

      如果您使用 AJAX 或简单的旧 POST 到 Web 服务器,则没有区别。如果密码未加密,则可以被第三方读取。

      您可以做的是在客户端计算一个 SHA-1 校验和(例如,http://plugins.jquery.com/files/jquery.sha1.js.txt),然后将哈希值而不是明文密码发送到服务器。它变得更好了,因为观察者本身并没有得到密码,只是一个哈希。

      【讨论】:

      • 如果SHA-1(password)被捕获,系统很容易受到重放攻击,而无需知道实际密码。
      【解决方案4】:

      是的,这是一个安全漏洞,因为有数据包嗅探器的人可以获取用户的密码。

      最好的解决方案是使用 HTTPS,这可能就像打开请求票一样简单,也可能意味着一些工作和购买证书。

      获得证书后,您需要将此页面作为 HTTPS 服务(以及 save.php)。您必须提供表单页面,即使它没有秘密:为了可以发出 HTTPS Ajax 请求,您需要在 HTTPS 页面上。

      还有一些不太安全的解决方案,例如在传输密码之前以某种方式隐藏密码。这并不酷,因为人们希望我们以安全的方式保护他们的信息。

      对于一般安全性,还有很多其他事情需要考虑。我认为rails security guide 对这些提供了很好的概述。其中一些是特定于 Rails 的,但也有相当一部分适用于 PHP。也许有一个等效的 PHP 文档。

      【讨论】:

        【解决方案5】:

        网络是一个非常有趣的地方。我相信 W3C 说尝试在客户端上加密密码是没有意义的。我假设他们认为这会给人们一种虚假的安全感?

        1. HTTPS 将阻止 eves droppers。正如 JTPRESTA 所述。
        2. 普通表单提交是纯文本格式,因此您的 AJAX 实现也将以纯文本格式发送数据,因此无论是否使用 ajax,都没有区别。
        3. 如果您真的愿意,您可以在浏览器中对密码进行 javascript MD5 哈希处理,但这会给您一种虚假的安全感,尤其是在您仍然通过 HTTP 发送密码的情况下。
        4. 我能想到的最后一个问题是保护您的 javascript 免受跨站点脚本攻击。有人可以将 javascript 注入您的系统,从而窃取密码,但从您的代码中看起来不太可能。

        总的来说,我认为您的代码很好。只要您在服务器上执行安全操作,例如安全地转义字符串以进行 SQL 注入。关于服务器安全方面最常见的问题,有一些非常好的主题,也可能对 stackoverflow 有很好的阅读。

        JB.

        【讨论】:

          【解决方案6】:

          从可用性的角度来看,这些让我感到困惑。它还可能对非典型用户界面造成严重破坏,例如用于视障者的触摸屏或浏览器。

          除此之外……

          1) 如果密码很重要,请使用 HTTPS。

          2) 确保您的数据库查询已参数化以避免 SQL 注入攻击。

          3) 无论提交方法如何,在允许用户更改密码之前让用户重新输入他们的姓名和密码总是一个好主意。和/或服务器应始终在每次请求时验证用户的身份验证和授权。

          只要服务器符合最佳实践,数据如何到达服务器应该不是问题。

          【讨论】:

            猜你喜欢
            • 2012-07-21
            • 1970-01-01
            • 1970-01-01
            • 2019-01-01
            • 2021-08-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多