Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过ajax提交密码_Javascript_Html_Ajax_Security - Fatal编程技术网

Javascript 通过ajax提交密码

Javascript 通过ajax提交密码,javascript,html,ajax,security,Javascript,Html,Ajax,Security,给定以下场景:我们有一个用于更改帐户密码的html表单。看起来是这样的: CurrentPassword: __________________ NewPassword: __________________ NewPasswordAgain: __________________ 我们希望通过ajax调用发送此请求。如果我们发送它并离开计算机(不注销并停留在完全相同的页面上),有人可以打开webkit inspector(或firebug)并看到如下内容: CurrentP

给定以下场景:我们有一个用于更改帐户密码的html表单。看起来是这样的:

CurrentPassword:   __________________
NewPassword:       __________________
NewPasswordAgain:  __________________
我们希望通过ajax调用发送此请求。如果我们发送它并离开计算机(不注销并停留在完全相同的页面上),有人可以打开webkit inspector(或firebug)并看到如下内容:

CurrentPassword:   __________________
NewPassword:       __________________
NewPasswordAgain:  __________________


为了使这更安全,您的解决方案是什么?甚至可以在此处使用ajax调用,还是使用“普通”html表单在发送后重新加载整个页面更好?

根据需要的安全级别,可以在发送ajax请求之前使用和公钥加密在浏览器中加密密码。在服务器端,您将解密密码并按正常方式处理它们

当然,您还需要小心删除用于保存输入密码的任何变量,我相信这其中还存在其他安全漏洞,但加密至少会为您提供某种程度的保护,以防此类攻击

快速搜索。(免责声明:我没有测试过这个,但它看起来相当不错)


最后,我强烈建议您通过发送所有登录信息。这在浏览器和服务器之间的整个浏览器会话上增加了一层额外的安全性。

在传输中加密密码,并确保您拨打的电话是通过SSL完成的

使用“普通”html表单也有同样的问题,因为数据包嗅探可以同样容易地在POST或GET头中显示相同的数据


我能想到的最佳解决方案是通过javascript对密码用户端进行加密。您实际上不必担心“如果用户禁用了javascript怎么办?”的情况,因为在这种情况下,AJAX请求也不会通过。显然,这可能会对您存储密码的方式产生影响,但它将允许您继续使用AJAX请求进行密码更新。

要在不使用SSL的情况下使其安全,请在客户端上使用哈希对密码进行哈希处理。虽然这将保护密码本身,但不会保护某人嗅探散列密码。因此,您也不能简单地使用哈希密码进行身份验证

一种方法是在进行身份验证时使用服务器生成的随机salt。为了进行身份验证,客户机从服务器请求salt,然后对密码进行一次散列(以匹配存储在服务器上的散列版本),然后使用从服务器收到的salt再次进行散列,最后使用第二个ajax查询和经过散列的密码进行身份验证

只有当它与自己存储的哈希密码匹配时,服务器才会进行身份验证,哈希密码与它以前向客户机提供的密码相同

这样,某人就不可能使用简单的哈希密码版本进行身份验证。由于服务器提供的每个salt只有效一次,因此基本上不可能有人拦截它并进行身份验证。(他们必须截获salt请求,然后在合法客户端能够验证之前尝试进行身份验证,同时欺骗他们的会话)

这可以在不使用SSL的情况下保护用户的密码,防止在合法用户进行身份验证时使用截获的数据登录,并且非常容易实现。当然,就保护网站上的实际数据而言,SSL是无法替代的,但是对于许多没有任何敏感信息的典型网站,您应该更加关注防止用户密码被盗,因为人们经常使用相同的密码。这就解决了这个问题


请注意,这也无助于防止会话劫持,但您可以通过在用户会话中包含特定于浏览器的信息,以及一次只允许一个活动会话,来最大限度地降低会话劫持的风险和损害,需要重新验证才能更改电子邮件地址或密码。

作者对此处的加密连接不感兴趣。他可能已经在做那件事了。他想要的是能够对任何有权访问计算机的人隐藏密码(和用户名),并可以打开inspector工具查看页面上发生的网络

您可以做的最简单的事情之一就是刷新页面,以防身份验证成功

您应该做的事情是每当用户按下“注销”时刷新页面。这将清除所有以前的网络数据

不太好的选择是在发送密码之前对密码进行加密、混淆和散列

在客户端对密码进行哈希处理并不理想,因为这会阻止在服务器端使用带有密钥的哈希密码(想想HMAC)。HMAC的密码是最好的,因为密钥保存在文件系统中,而salt保存在数据库中。破解密码散列需要相当可靠的系统访问权限

混淆和加密密码可以逆转。如果有人在Webkit Inspector上看到登录请求,他可能会非常有兴趣花时间解开你的防御


我强烈建议在某个时候刷新页面,以完全避免问题。其他选项似乎不太好。

要加密密码,客户端代码需要密钥,这也很容易受到攻击。@Pointy-使用公钥加密,有一对密钥,供用户用于加密消息,另一个是隐藏的,只有那些需要解密信息的人才知道。在对称密钥加密方案中,你说的是对的,但是RSA是不对称的。啊,好的,我明白你的意思了。我想这样行;然而,这一切似乎有些毫无意义,因为如果计算机确实无人看管,那么坏人就可以访问浏览器