使用AJAX发送纯文本密码有多安全?

j82*_*749 12 php security authentication ajax login

也许这个标题措辞严厉,但想不出一个更好的说法.

我目前正在开发一个登录系统(没有正式的,只是试验),并计划使用PHPLiveX(一个AJAX库)来实现某些功能.基本上你创建了一些PHP函数,然后通过JavaScript调用.您可以将参数(getElementById)添加到转移到PHP函数的JavaScript中.

我真正想知道的是,在不加密密码的情况下从JavaScript调用函数是否安全,然后让PHP函数对其进行加密(在本例中为SHA256).是否可以拦截通过AJAX传输的数据?如果是这样的可能性有多大?

Pet*_*ley 45

没有或多或少比浏览器发出的普通HTTP POST请求更安全(如a <form>)

对于非AJAX请求,"修复"是相同的"修复" - 使用SSL.

  • 该死的,我迟到了5秒钟. (4认同)
  • @ briggins5就像彼得所说的那样,AJAX只是转发时发生的HTTP POST请求,或者是"异步".所以,从某种意义上说,你是对的.但是,由于AJAX是异步的,因此客户端浏览器中的状态更改难以理解,因此更容易破坏安全性. (2认同)

Spe*_*ort 20

正如其他人所提到的,它并不比从表单发送HTTP帖子更危险.事实上,这是完全相同的事情.

但是,如果HTTPS不是一个选项,您可以始终在未加密的连接上使用质询/响应方案.基本上它的工作原理如下:

  • 服务器具有用户密码的SHA(或您喜欢的任何散列算法)哈希值.
  • 客户有密码.
  • 客户端请求(使用未加密的AJAX)服务器发送质询(随机字节串;字符很好.)
  • 服务器创建质询和质询ID,并在过期时保存.
  • 客户接受挑战并挑战ID.
  • 客户端使用SHA哈希密码.
  • 客户端使用以某种方式附加的质询来散列生成的哈希值.
  • 客户端发送质询ID(不是质询本身)和第二个产生的哈希值.
  • 服务器使用ID查找质询(如果存在且尚未过期).
  • 服务器将挑战附加到存储的密码哈希,并使用与客户端相同的方案创建哈希.
  • 服务器将其哈希与客户端进行比较.如果相同,则对用户进行身份验证.

一旦你明白了,设置起来非常简单.维基百科有一些关于它的其他信息.

编辑:我注意到我忘记提及,无论身份验证是否成功,您都必须删除挑战.在一次挑战中给客户多次尝试可能会导致安全问题.

  • @jrockway:首先,这不是重新发明SSL.挑战/响应仅适用于确定双方何时知道相同的信息.其次,Salts不是秘密,用于防御彩虹表的可接受的腌制方法是:hash = SHA(SHA(密码).salt).在这个设置中,盐是挑战,它的目的变成两倍哈希= SHA(SHA(密码).挑战).第三,我以SHA1为例.如果您需要额外的安全性,可以使用更大的方案. (5认同)
  • 与仅将用户名和密码作为纯文本发送相比,它的安全性如何?好吧,如果你将值0附加到该方法,并且我的方法是一些n> 0(比如.0005甚至,为了参数)我的方法是> 1,000,000,000,000,000倍更安全. (4认同)
  • 打破这一点要比打破SSL容易得多.如果您没有使用密码,您可以在几分钟内使用一些下载的彩虹表进行破解.如果您正在使用密码,攻击者仍然可以捕获散列密码并尝试猜测 - SHA1速度非常快,现代计算机每秒可以尝试数百万个密码.(不要重新发明SSL!) (2认同)

And*_*ore 7

无论您是通过AJAX还是通过普通表单发送密码,它仍然通过HTTP POST(希望)请求发送.因此,您不会明智地添加或删除任何安全性.

防止某人拦截您密码的唯一方法是使用SSL(通过AJAX或不通过AJAX).