混合HTTP / HTTPS网站的集成问题

时间:2012-05-24 22:06:35

标签: jquery http https cross-domain

我在业余时间一直在使用网络应用程序。

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

上可用

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

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

这引出了我的问题...

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

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

有人有什么建议吗?

1 个答案:

答案 0 :(得分:3)

让我尝试了解您的工作流程:您的HTTP页面必须调用HTTPS服务器,而HTTPS服务器又会访问会话cookie,并且您需要HTTP页面可以访问该响应,这是正确的吗?

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

  1. 您使用postMessage与iframe一起使用(序列化的)请求参数;
  2. iframe的消息回调接收请求,确认它来自您的页面,并向服务器提交Ajax请求(传递会话cookie);
  3. 使用postMessage;
  4. 接收,序列化并将响应发送到主页面
  5. 主页面的消息回调接收响应并对其执行操作。
  6. 这不应该很难封装在单个函数调用中。这里棘手的部分是上面的粗体片段:如果iframe中的脚本没有正确确认请求来自正确的页面,这可能会创建一个CSRF漏洞(恶意页面可能会将您的安全脚本嵌入到iframe中,发送请求对它来说,只要用户在发生这种情况时进行身份验证,iframe就会尊重请求。

    对于那个问题,不幸的是我的建议很少。总体而言,在HTTP页面中嵌入HTTPS内容是一个坏主意,但由于您有理由这样做,因此您也应该处理安全问题。