通过HTTPS使用JSONP API的HTTP站点?

时间:2010-10-29 17:52:22

标签: ajax security https jsonp

考虑到FireSheep已经获得的所有报道,我一直在尝试制定平衡我管理的某些网站(例如博客网站,用户提供评论的杂志网站)的HTTP / HTTPS使用的最佳做法。

对我而言,如果用户已登录,则会通过HTTPS传递所有页面。如果页面是公开的(例如博客),则加密公共页面几乎没有意义。我想做的就是通过HTTP渠道嗅探cookie来阻止会话劫持。

所以,有一个计划是:

  • 登录表单是通过HTTPS
  • 发出两个cookie:一个cookie是'public',并在那里标识用户只读方面(例如'welcome bob!')。第二个cookie是私有的,只有'HTTPS'。这是在用户进行更改时验证的Cookie(例如,添加评论,删除帖子)。

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

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

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

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

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

那会有用吗?它似乎适用于chrome和FF,但它的IE将成为聚会的一员!

2 个答案:

答案 0 :(得分:1)

另一种方法是让iframe指向一个https页面,该页面可以通过https对服务器进行各种Ajax调用(GET,POST,PUT等)(与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&lt; = 7之外的所有现代浏览器,您必须使用Flash进行JSONP或跨域通信。

答案 1 :(得分:0)

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

  

你可以在其中拥有HTTPS内容吗?   HTTP页面?我知道你会收到警告   另一种方式,但我认为   HTTP内部的HTTPS不是安全性   breach.breach。

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