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

时间:2008-09-23 03:16:16

标签: ajax security ssl cookies

我目前正致力于基于AJAX的网站的身份验证,并且想知道是否有人对这类事情的最佳做法有任何建议。

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

抱歉,系统由于AJAX的性质,迅速进行多次请求时,他们可能会回来失灵,设置cookie错误,并打破了会议,所以我需要重新实现。

我的想法是:

  • 一种明显不太安全的基于会话的方法
  • 在整个网站上使用SSL(看起来有点矫枉过正)
  • 使用经过ssl身份验证的iFrame进行安全交易(我只是假设这是可能的,只需要一点点jquery黑客攻击)

问题不在于转移的数据,唯一的问题是有人可能会控制不属于他们的帐户。

一种明显不太安全的基于会话的方法

6 个答案:

答案 0 :(得分:1)

就我个人而言,我没有发现整个网站(或大部分网站)使用SSL都是过度杀伤。也许不久前速度和进给速度较慢。现在我会毫不犹豫地将网站的任何部分置于SSL下。

如果您已确定可以接受使用SSL作为整个站点,则可以考虑使用旧的“基本身份验证”,其中服务器返回 401 响应,导致浏览器提示输入用户名/密码。如果您的应用程序可以使用此类登录,则适用于AJAX以及对您站点的所有其他访问,因为浏览器会处理使用适当凭据重新提交请求(如果您使用SSL,则安全,但仅< / b>如果你使用SSL - 不要使用普通的http使用Basic auth!)。

答案 1 :(得分:1)

SSL是必须的,阻止了几个用户可以使用的透明代理连接。然后我只需检查传入的IP地址和经过身份验证的地址。

重新验证:

  • 一旦IP地址改变
  • 在没有任何请求的情况下超过n秒的时间
  • 单独处理任何重要交易

答案 2 :(得分:1)

一个常见的解决方案是对用户的会话ID进行哈希处理并将其传递给每个请求,以确保请求来自有效用户(请参阅this slideshow)。从CSRF的角度来看,这是相当安全的,但如果有人在嗅探数据,那么它就会被截获。根据您的需要,ssl始终是最安全的方法。

答案 3 :(得分:0)

如果您对服务器的每个响应都设置了“生成”时间戳,并且AJAX应用程序始终可以使用带有最新时间戳的cookie,那该怎么办。

答案 4 :(得分:0)

您最好的选择是在先前经过身份验证的Apache和/或Tomcat连接上使用SSL连接。基于表单的身份验证在任何一个中都具有所需的SSL连接,可以为您提供安全连接。然后,webapp可以为会话提供安全性和身份,而客户端Ajax则不需要关心安全性。

答案 5 :(得分:0)

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