保护AJAX应用程序的最佳方法

时间:2020-03-06 14:34:42  来源:igfitidea点击:

我目前正在研究基于AJAX的站点的身份验证,并且想知道是否有人对这种事情的最佳实践有任何建议。

我最初的方法是基于cookie的系统。本质上,我使用身份验证代码设置了一个cookie,并且每次数据访问都更改了该cookie。同样,每当身份验证失败时,该用户的所有会话都将被取消身份验证,以阻止劫机者。要劫持会话,必须有人保持登录状态,而黑客则需要发送最新的cookie更新来欺骗会话。

不幸的是,由于AJAX的性质,当快速发出多个请求时,它们可能会恢复正常,将cookie设置为错误,并中断会话,因此我需要重新实现。

我的想法是:

  • 一种绝对不太安全的基于会话的方法
  • 在整个网站上使用SSL(似乎过分杀伤力)
  • 使用经过ssl身份验证的iFrame进行安全交易(我只是有点假设这是可能的,需要进行一些jQuery黑客攻击)

问题不在于正在传输的数据,唯一的问题是有人可能会控制一个不是他们自己的帐户。

一种绝对不太安全的基于会话的方法

解决方案

如果我们在服务器的每个响应上加上"生成的"时间戳,并且AJAX应用程序始终可以使用具有最新时间戳的cookie,该怎么办?

最好的选择是在与Apache和/或者Tomcat进行预先身份验证的连接上使用SSL连接。两者中基于表单的身份验证均具有必需的SSL连接,可为我们提供安全的连接。然后,Web应用程序可以为会话提供安全性和身份,而客户端Ajax不必担心安全性。

必须使用SSL,以防止可能被多个用户使用的透明代理连接。然后,我只需使用已通过身份验证的IP地址来检查传入的IP地址。

重新验证:

  • ip地址更改后
  • 超过n秒的超时而没有任何请求
  • 单独处理任何重要交易

我们可以尝试阅读Billy Hoffman和Bryan Sullivan撰写的《 Ajax Security》一书。我发现它改变了我对安全性的思考方式。对于Ajax的每个阶段都有非常具体的建议。

常见的解决方案是对用户的会话ID进行哈希处理,并将其与每个请求一起传递,以确保该请求来自有效用户(请参见此幻灯片)。从CSRF的角度来看,这是相当安全的,但是如果有人在嗅探数据,则可以将其截获。根据需求,ssl始终是最安全的方法。