关于AJAX安全的问题请咨询

时间:2011-03-24 19:49:14

标签: php ajax jquery

我有一个我正在创建的社交网络,并且有一个安全问题。我有能力在网站上有朋友,当你请求朋友时,它将是一个使用jQuery运行AJAX脚本的按钮。

我知道javascript很容易被黑客攻击,并且在这里阅读http://www.acunetix.com/websitesecurity/ajax.htm,AJAX并不像看起来那样安全。他们声称“由于XML HTTP请求使用与Web上其他所有协议相同的协议(HTTP),从技术上讲,基于AJAX的Web应用程序容易受到与”普通“应用程序相同的黑客攻击方法的影响。

所以基本上我不希望蠕虫通过我的AJAX功能继续运行朋友请求,并且有人在网站上签名并且他们有1400万个朋友请求。这也是我在网站上运行的其他几个AJAX脚本的问题。我的问题是,我应该保持服务器端的一切。我正在使用php所以,如果每个朋友请求只是重新加载页面,我想避免这样的事情? 非常感谢任何帮助。

5 个答案:

答案 0 :(得分:5)

如果你有安全问题,它们并不是ajax独有的,但有一些简单的方法可以让事情变得更加困难。

1)正如Diodeus所说 - 绝对不要让人们在没有通过会话进行身份验证的情况下使用您的服务。与要求您登录的网站上的任何其他页面相同。

2)通过将客户信息嵌入会话密钥(cookie)并在服务器上验证它来使会话劫持更​​加困难,例如: IP地址,浏览器版本。不过,这仍然可以被欺骗。

3)如果特定会话在特定时间段内(例如每分钟10次)发出超过x个请求,请将其注销并禁止它们一小时。设置更高的限制以禁止它们直到由管理员恢复。如果发生这种情况,请让代码自己发送电子邮件,以便了解您是否遇到过问题。

4)如果您真的很担心,请使用SSL。这实际上是绝对防止会话劫持的唯一方法(除了为会话数据实现自己的私钥加密机制)。

5)如果不使用SSL,您无法阻止会话劫持的可能性,但您可以保护用户的密码不被轻易窥探。进行身份验证时,请执行以下操作:

  • 客户端脚本从服务器请求salt(随机字符串)
  • 服务器向客户端发送salt并使用会话
  • 记住它
  • 客户端使用Sha-256对密码进行哈希处理,例如使用salt,并使用其用户名和密码进行身份验证。哈希密码。服务器使用相同的盐来哈希与用户相关联的密码,并验证它是否与客户端发送的哈希相匹配。服务器忘记了这次使用的盐。

这样,观看会话的人只能看到哈希密码,并且由于哈希每次都不同,他们实际上无法使用针对您服务的哈希再次登录。您仍然无法阻止他们劫持会话,但您可以阻止他们查看您的用户密码或者能够自己登录。

实际上,会话劫持并不是那么常见,尽管高调的实现当然是通过wifi的facebook。如果有人拿出一个Firefox插件来破解你的社交网络,那么你应该感到激动,因为你知道你已经成功了。

答案 1 :(得分:1)

这些不是AJAX特有的问题。它归结为检查和清理您的数据。我假设用户必须先注册/登录才能添加好朋友(毕竟,你怎么跟踪谁和谁的朋友?)所以这里有一些明显的要点:

  • 在注册过程中添加CAPTCHA或类似功能,以减少僵尸网络用户。 reCAPTCHA这些天似乎是行业标准(并且很容易设置)。
  • 处理AJAX电话时,请确保允许用户做他正在做的事情(即他是否已登录,是否激活了他的帐户等)
  • 处理好友请求时,请忽略重复项。人们有时倾向于故意忽略朋友请求,他们可能不希望在邀请者不耐烦时再次获得邀请。
  • 找到一种方法来跟踪可疑行为。如果用户在过去两秒内发送了50个好友请求,则可能是机器人。暂时阻止该帐户并让人员检查。隐藏来自被阻止用户的朋友请求也是一个好主意。

还有更多,但这些应该让你开始。

答案 2 :(得分:0)

在客户端上设置登录cookie。使用ajax请求发送cookie值并在服务器上验证它。

答案 3 :(得分:0)

我不确定我是否完全理解,因为如果有一些蠕虫或任何提交AJAX请求的内容,为什么同一个蠕虫不会发出非ajax请求?

无论哪种方式,您都应该进行服务器端验证以确保请求有效。是否要对可以发出的好友请求数进行一些验证与您是否使用ajax无关。

答案 4 :(得分:-1)

真的没有AJAX这样的东西。术语AJAX是对组织事物的一种方式的一般描述。所谓的“AJAX”请求只是一个HTTP GET或PUT。

相关问题