【发布时间】:2011-04-29 12:49:25
【问题描述】:
只是想知道,是否可以通过 Ajax 请求安全地发送密码?
我有一个登录框,它调用一个 ajax 请求来尝试登录/传递并检索一个带有错误(如果有的话)的 JSON 对象。
我应该改用表单重定向吗?
[编辑] 将加密密码存储在数据库中不是解决方案,因为 ajax 发送的登录名和密码是访问数据库本身(内部应用程序)的登录名/密码。 p>
【问题讨论】:
标签: javascript ajax passwords
只是想知道,是否可以通过 Ajax 请求安全地发送密码?
我有一个登录框,它调用一个 ajax 请求来尝试登录/传递并检索一个带有错误(如果有的话)的 JSON 对象。
我应该改用表单重定向吗?
[编辑] 将加密密码存储在数据库中不是解决方案,因为 ajax 发送的登录名和密码是访问数据库本身(内部应用程序)的登录名/密码。 p>
【问题讨论】:
标签: javascript ajax passwords
发送第三方无法拦截的内容的唯一方法是使用 HTTPS 而不是常规 HTTP。这样一来,服务器和客户端之间发送的所有内容都会被高度加密。
【讨论】:
对于它的技术地狱,你可以。如果您可以访问支持crypt(crypt(T,A),B) == crypt(crypt(T,B),A) 的单向加密函数crypt(text,key),您可以执行以下操作:
KEY。永远不要告诉任何人。 crypt(password,KEY)存入数据库。RAND
crypt(password,RAND)。密码永远不会离开用户的计算机。crypt(crypt(password,RAND),KEY),从数据库中计算crypt(crypt(password,KEY),RAND),并将两者进行比较。他们应该是平等的。所有这些都是不必要的复杂,需要付出很多努力才能正确和安全地实施。 购买 SSL 证书并使用 HTTPS 更容易实现这种安全级别,甚至更多。
【讨论】:
你可以这样做:
哈希密码并存储在数据库中
在客户端:哈希密码,然后添加盐(连接 session_id 字符串),然后再次哈希
在服务器上:从数据库中获取散列 pw,然后添加盐(连接 session_id 字符串),然后再次散列
[编辑:然后将服务器上生成的hash-salt-hash与客户端发送的hash-salt-hash进行比较]
现在拦截你的 hash-salt-hash 密码已经没什么用了,因为它只对那个特定的会话有效......
【讨论】:
您正在寻找的是“零知识协议”。这是一种无需发送即可知道密码的沟通方式。您将在用户浏览器中运行的 javascript 和服务器之间进行通信。
奖励,即使连接未加密,这些协议通常也是安全的。请注意,依赖它而不使用 SSL 是愚蠢的,因为中间的人会简单地用一个只发送密码的相似函数替换你漂亮的零知识协议实现。
【讨论】: