13

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

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

不幸的是,由于 AJAX 的性质,当快速发出多个请求时,它们可能会乱序返回,设置错误的 cookie,并中断会话,所以我需要重新实现。

我的想法是:

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

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

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

4

6 回答 6

1

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

于 2008-09-30T08:24:13.103 回答
1

SSL 是必须的,可以防止多个用户使用的透明代理连接。然后,我只需将传入的 IP 地址与经过身份验证的 IP 地址一起检查即可。

重新认证:

  • 一旦IP地址改变
  • 在没有任何请求的情况下超过 n 秒的超时
  • 单独处理任何重要交易
于 2008-09-24T17:47:29.363 回答
1

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

如果您决定对整个站点使用 SSL 是可以接受的,您可以考虑只使用旧的“基本身份验证”,其中服务器返回401响应,这会导致浏览器提示输入用户名/密码。如果您的应用程序可以使用这种类型的登录,则非常适合 AJAX 和对您网站的所有其他访问,因为浏览器使用适当的凭据处理重新提交请求(并且如果您使用 SSL 是安全的,但前提是您使用 SSL -- 不要将基本身份验证与普通 http 一起使用!)。

于 2008-09-23T03:26:50.127 回答
0

您可以尝试阅读 Billy Hoffman 和 Bryan Sullivan 所著的 Ajax Security 一书。我发现它改变了我对安全性的看法。Ajax 的每个阶段都有非常具体的建议。

于 2008-09-30T02:50:15.717 回答
0

如果您在来自服务器的每个响应上放置一个“生成的”时间戳,那么 AJAX 应用程序可以始终使用具有最新时间戳的 cookie。

于 2008-09-23T03:20:52.140 回答
0

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

于 2008-09-23T03:27:38.720 回答