【问题标题】:HTTP site with JSONP API over HTTPS?通过 HTTPS 使用 JSONP API 的 HTTP 站点?
【发布时间】:2011-05-02 13:21:25
【问题描述】:

鉴于 FireSheep 获得的所有报道,我一直在尝试为我管理的一些网站(例如博客网站、具有用户贡献的 cmets 的杂志网站)制定平衡 HTTP / HTTPS 使用的最佳实践。

对我来说,如果用户已登录,通过 HTTPS 传送所有页面就太过分了。如果一个页面是公共的(例如博客),那么加密公共页面就没有什么意义了。我想做的就是通过在 HTTP 通道上嗅探 cookie 来防止会话劫持。

所以,一个计划是:

  • 登录表单通过 HTTPS
  • 发出两个 cookie:一个 cookie 是“公开的”,并在只读方面识别用户(例如“欢迎鲍勃!”)。第二个 cookie 是私有的并且“仅限 HTTPS”。这是每当用户进行更改(例如添加评论、删除帖子)时都会验证的 cookie。

这意味着所有“更改”请求都必须通过 HTTPS 发出。

我们使用了很多 AJAX。事实上,许多评论表单使用 AJAX 来发布内容。

显然,我不能直接使用 AJAX 将内容从 HTTP 前端发布到 HTTPS 后端。

我的问题是:我可以使用脚本注入(我认为这通常称为“JSONP”吗?)来访问 API?所以在这种情况下,会有一个 HTTP 公共页面通过注入通过 HTTPS 访问的脚本将数据发送到私有后端(以便私有 cookie 在请求中可见)。

您可以在 HTTP 页面中包含 HTTPS 内容吗?我知道您会收到相反的警告,但我认为 HTTP 中的 HTTPS 不是安全漏洞。

这行得通吗?它似乎可以在 chrome 和 FF 中运行,但它的 IE 将成为派对大便!

【问题讨论】:

    标签: ajax security https jsonp


    【解决方案1】:

    另一种方法是拥有一个指向 https 页面的 iframe,该页面可以通过 https 对服务器进行各种(GET、POST、PUT 等)Ajax 调用(与 iframe 相同的域也在 https 上)。一旦响应返回到 iframe 中,您就可以使用 HTML5 postMessage API 将消息发回主窗口。

    Pseudo code:
        <iframe src="https://<hostname>/sslProxy">
        sslProxy:
            MakeAjaxyCall('GET', 'https://<hostname>/endpoint', function (response) {
                top.postMessage(response, domain);
            });
    

    这适用于除 IE

    【讨论】:

      【解决方案2】:

      JSONP 的问题在于您只能将它用于 GET。

      你能不能在一个里面有 HTTPS 内容 HTTP 页面?我知道你会收到警告 其他方式,但我认为 HTTP 内的 HTTPS 不是安全措施 违反。违反。

      在常规 HTTP 页面中包含 HTTPS 内容不会在任何浏览器中引发任何警报。 但是,我认为 JSONP 不会帮助您解决这个问题。使用 GET 发布内容和修改数据是一个非常糟糕的主意,并且容易受到其他攻击,例如 CSFR

      【讨论】:

      • 是的,使用基于 GET 的 API 并不理想。但我不知道另一种方式。我想您可以使用一次性访问令牌等来保护基于 GET 的调用。但并不理想。
      猜你喜欢
      • 2015-10-13
      • 2016-06-22
      • 1970-01-01
      • 2013-11-07
      • 2017-01-18
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多