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

时间:2009-07-17 19:08:46

标签: php ajax security authentication login

也许这个标题措辞严厉,但却无法想出更好的说法。

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

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

13 个答案:

答案 0 :(得分:45)

比浏览器发出的普通HTTP POST请求更安全或更不安全(如<form>中所述)

对于非AJAX请求,“修复”是相同的“修复” - 使用SSL。

答案 1 :(得分:20)

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

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

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

一旦你明白了,设置起来非常简单。 Wikipedia有一些额外的信息。

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

答案 2 :(得分:7)

无论您是通过AJAX还是通过普通表单发送密码,它仍然通过HTTP POST(希望)请求发送。因此,您不会在安全方面添加或删除任何内容。

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

答案 3 :(得分:1)

AJAX调用只是普通的HTTP请求。

它的行为与普通的HTTP请求相似,并且具有它的所有优点和缺点。它并不安全。

要使您的AJAX调用安全,您可以尝试以下几种方法:

  1. 使用SSL。 SSL将加密用户和服务器之间的邮件。 SSL的缺点是您必须为有效的SSL证书支付额外费用。无效的SSL证书虽然可用,但不能为用户提供相同级别的安全保障。
  2. 在发送之前加密请求,客户端。例如:在通过网络发送之前哈希用户的密码。大多数情况下,您无需使用用户的纯文本密码。当用户不允许运行客户端脚本时,这不可用。
  3. 除了常见的误导性信息,其中POST比GET更安全,但事实并非如此。对于攻击者来说,两者都同样开放。

答案 4 :(得分:1)

这样安全就像通过网络发送不受SSL保护的登录表单一样安全,就像几乎所有的论坛一样!

答案 5 :(得分:1)

确保您的AJAX调用的目标是一个受信任的HTTPS://页面,并且您已经使其与其他应用程序正在执行的相同信息的任何其他发送一样安全。大多数库/框架都不会将您限制为HTTP://用于AJAX调用。

答案 6 :(得分:1)

是的,可以阅读。就像其他一切没有某种安全层一样(参见SSL)

要自己查看它,就像执行AJAX命令一样运行WireShark之类的工具。

有多大可能?不是很好,但用户的密码可能会以纯文本格式保存在某人的日志文件中。如果有人最终找到它,那么这可能是坏消息。回到大学,我的网络课程可以访问一些(半)花式路由器。我们在随机网站上注册了帐户。正如我们所做的那样,我们注意到路由器中的日志文件有些非常可怕。这让我大开眼界地思考如何跟踪每个通信并且很可能在某处记录。

答案 7 :(得分:0)

通过AJAX传输的纯文本密码与通过普通HTTP帖子传输的相同密码一样安全。也就是说,AJAX使用HTTP,因此可以被拦截和嗅探。最好的办法是使用HTTPS(SSL)。

有关AJAX和安全性的进一步阅读,我建议阅读以下内容

答案 8 :(得分:0)

这不安全。不要发送未加密的密码。很可能它们会在某些时候被拦截,你会遇到重大问题。

这是捕获telnet密码的video示例。 Telnet以纯文本形式发送,这很好地说明了如果你想到这样做就会遇到的主要问题。任何两位脚本小子都可以比你更快地获取纯文本密码,“哦,天哪,我的数据库去了哪里?”

答案 9 :(得分:0)

您是以明文形式发送的,因此任何有嗅探/聆听/等等客户网络的人都可以轻松查看密码。 AJAX调用只是一个普通的旧HTTP消息。如果您想要查看此操作,请启动wireshark的副本并自行提出请求。您将能够在HTTP数据包中看到密码。

答案 10 :(得分:0)

如前所述,SSL是最好的解决方案。但是,您可以在客户端散列密码。如果你谷歌为它,你会发现很多md5的javascript实现。

答案 11 :(得分:0)

该死的你们担心我。 SSL不能防止arp中毒MITM攻击。像你们这样崇拜SSL将是致命的。您必须有一种方法在客户端加密密码才能进行一跳,否则即使是新手黑客也能够以明文拦截密码

答案 12 :(得分:0)

在构建使用Ajax的应用程序时,还应该非常了解潜在的安全漏洞。

以下网站有关于Ajax和XSS或XSRF攻击的一些非常好的信息http://www.isecpartners.com/files/isec-attacking_ajax_applications.bh2006.pdf

不要忘记,当您通过javascript调用访问远程功能时,用户可以简单地猜测函数调用并修改它以进行他/她的出价。