【问题标题】:Best way to secure an AJAX app保护 AJAX 应用程序的最佳方式
【发布时间】:2008-09-30 16:24:13
【问题描述】:

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

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

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

我的想法是:

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

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

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

【问题讨论】:

  • 在此处发布您的网站,我相信有几个人会很乐意破解它,然后告诉您他们是如何做到的;)
  • 您需要弄清楚您的威胁模型是什么。即使您使用 SSL 保护您的整个网站,仍然有劫持帐户的方法。问题是,这些方式是否值得被劫持帐户的价值。

标签: ajax security ssl cookies


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    重新认证:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • -1 如果您还告诉我们这本书针对这个“特定问题”给出了哪些“特定建议”,将会更有帮助。
            猜你喜欢
            • 1970-01-01
            • 2020-09-21
            • 2014-10-20
            • 1970-01-01
            • 2015-05-30
            • 2019-10-09
            • 2021-09-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多