【问题标题】:Integration problems with mixed HTTP / HTTPS website混合 HTTP / HTTPS 网站的集成问题
【发布时间】:2012-05-31 12:53:54
【问题描述】:

我在业余时间一直在开发一个 web 应用程序。

它主要面向公开发布/消费内容,因此内容应通过 http 公开查看。它还允许/包含 3rd 方小部件,因此需要 http 访问(许多供应商没有 https 版本,然后在 https 页面上存在 http 的混合内容问题)。由于这个和其他一些业务目标,99% 的网站必须在 http 上可用。

到目前为止我实施的锁定方案是这样的:

  • 一切都在同一个域中
  • /account 和 /api 下的所有内容都通过 https 和仅限 https 的 cookie 进行处理。只有这些安全会话 ID 可用于写入或访问个人身份资料。
  • 其他一切都通过 http 和一组单独的 http cookie 处理。这些 cookie 主要用于基于浏览器的 javascript 自定义,而不是用于“写入”或查看敏感内容)

这导致我遇到问题......

如果有人想在 webapp 上执行书签或社交活动,则需要通过 HTTPS 通道进行 - 使用 HTTPS cookie 等 - 但是浏览器的同源策略将 http 和 https 视为两个不同的服务器。

我正在尝试考虑有效(最好是简单)的方法来允许从 HTTP 内容到 HTTPS 服务器的 API 调用。我的第一个想法是使用 JSONP,但我需要会话 cookie - 而这对我来说是不可见的。

有人有什么建议吗?

【问题讨论】:

    标签: jquery http https cross-domain


    【解决方案1】:

    让我试着理解一下你的工作流程:你的 HTTP 页面必须调用 HTTPS 服务器,然后它会访问会话 cookie,并且你需要 HTTP 页面可以访问响应,对吗?

    这样做的一种方法是使用单独的 iframe 来托管与服务器通信的脚本,并让主页和 iframe 使用 HTML5 postMessage 进行通信。因此,实现上述工作流程的步骤是:

    1. 您对 iframe 使用 postMessage,并带有(序列化的)请求参数;
    2. iframe 的消息回调接收到请求,确认它来自您的页面,并向服务器提交 Ajax 请求(传递会话 cookie);
    3. 使用postMessage接收、序列化并发送到主页;
    4. 主页的消息回调接收响应并对其进行处理。

    这应该不难封装在单个函数调用中。这里棘手的部分是上面的粗体片段:如果 iframe 中的脚本没有正确确认请求来自正确的页面,这可能会产生 CSRF 漏洞(恶意页面可能会将您的安全脚本嵌入 iframe,发送请求并且,只要用户在发生这种情况时通过身份验证,iframe 就会接受请求)。

    对于这个问题,不幸的是,我几乎没有什么建议。总体而言,在 HTTP 页面中嵌入 HTTPS 内容是一个坏主意,但既然您有理由这样做,您也应该处理安全隐患。

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 2016-09-04
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      相关资源
      最近更新 更多