我是否可以要求使用HTTPS作为画布URL以保护signed_request内容?

时间:2011-10-12 20:58:46

标签: facebook security oauth facebook-iframe facebook-canvas

我正在使用iframe方法编写一个新的画布应用程序。我的后端支持画布响应的HTTP和HTTPS,但默认情况下,Facebook会将用户置于HTTP上,并通过HTTP直接以纯文本形式发送所有重要凭据(即在signed_request有效负载中访问令牌等)。这当然是共享网络(咖啡店,办公室等)的安全漏洞,在这些漏洞中嗅探访问令牌是微不足道的。)

如何强制所有画布请求通过HTTPS运行,并保护我的用户凭据?

我认为所有开发者都应该 - 或者被要求 - 来做到这一点。虽然我不熟悉Facebook开发,但我很惊讶他们不会将HTTPS用于所有用户访问令牌的直接传输。 Oauth 1.0具有允许通过HTTP使用访问令牌的机制(因为请求必须由客户端应用程序签名),但OAuth 2.0取消了所有这些,支持使用HTTPS来获取具有嵌入式凭证的任何请求。 Facebook帮助设计了OAuth 2.0,并且是afaics,通过偏离画布请求中的HTTPS使用来破坏设计的安全性。

1 个答案:

答案 0 :(得分:0)

您可以使用PHP或JavaScript轻松完成此操作。您所要做的就是检测用户是否正在使用HTTP并将其重定向到HTTPS。例如:

<script>
if ( window.location.protocol == 'http:' ) {
   window.top.location = 'https://facebook.com/yourapp';
}
</script>

上面的代码将检查iframe是否使用HTTP加载。如果是,它将重置父URL(即facebook)以指向您网站的HTTPs版本(因此也使用HTTPS加载iframe)。