通过ajax提交密码

Eli*_*ias 8 html javascript security ajax

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

CurrentPassword:   __________________
NewPassword:       __________________
NewPasswordAgain:  __________________
Run Code Online (Sandbox Code Playgroud)

我们想通过ajax调用发送此请求.如果我们发送它并且我们离开我们的计算机(没有注销并停留在完全相同的页面上),有人可以打开webkit检查器(或firebug)并看到如下内容:

http://cl.ly/3y213W1q0U2y2e251k0O

什么是让你更安全的解决方案?甚至可以在这里使用ajax调用,还是最好使用"正常"的html表单,在发送后重新加载整个页面?

eyk*_*nal 5

使用"普通"html表单具有相同的问题,因为数据包嗅探可以轻松地在POST或GET标头中显示相同的数据.

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


Tow*_*wer 3

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

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

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

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

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

密码的混淆和加密是可以逆转的。如果有人在 Webkit Inspector 上看到登录请求,他可能很有兴趣花时间来解除您的防御。

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

  • 值得注意的是,当前版本的 Chrome(可能还有其他浏览器)允许您在导航之间保留检查器日志,因此假设刷新会将日志清空不再正确。 (2认同)