在Facebook上使用安全浏览时,不安全的JavaScript尝试访问框架

时间:2012-02-06 21:15:16

标签: javascript xss frame unsafe facebook-javascript-sdk

我上周推出了一个应用程序并且已经注意到,因为在Chrome中只有我的画布的高度并不总是被调整。我花了很多时间查看问题并注意到我收到了以下错误 - 有时候。

Unsafe JavaScript attempt to access frame with URL https://apps.facebook.com/tabletr/ from frame with URL
     

http://static.ak.facebook.com/connect/canvas_proxy.php?version=3#behavior=p&method=getPageInfo&params=%7B%22channelUrl%22%3A%22https%3A%2F%2Fs-static.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%3Fversion%3D3%23cb%3Df3782154e%26origin%3Dhttps%253A%252F%252Ftabletr.herokuapp.com%252Ff2951037b%26relation%3Dtop.frames%255Biframe_canvas_fb_https%255D%26transport%3Dpostmessage%22%2C%22frame%22%3A%22iframe_canvas_fb_https%22%7D&relation=top。   域,协议和端口必须匹配。

现在,了解一两件关于编程的事情,我推断这可能是由于httpshttp可以互换使用。我得到错误(有时)在Facebook上“安装”安全浏览,从不“关闭”。

但我觉得奇怪的是,在浏览HTTPS时偶尔会出现问题。我仍然没有找到任何出现问题的模式或我的代码按预期工作。我知道这个主题上有一些帖子,我尝试了一些解决方法,但似乎没有解决我的问题。这是我的代码的一部分 -

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '<myid>', // App ID
            channelUrl : '//tabletr.herokuapp.com/channel.php', // Channel File
            status     : false, // Check login status
            cookie     : true, // Enable cookies to allow the server to access the session
            xfbml      : false  // Parse XFBML
        });

        // Additional initialization code here
        FB.Canvas.setSize({ height: 1200 });
    };

    // If I comment out this function I don't get any unsafe URL errors
    // anymore. I'm guessing that the include of the JavaScript code either
    // fails to use the right protocol or is faulty in its implementation
    // by Facebook. My money is on the former.
    (function(d){
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        //js.src = "//connect.facebook.net/en_US/all.js";
        js.src = "//tabletr.herokuapp.com/js/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    }(document));
</script>

我该如何解决这个问题?说实话,我不在他们身边。也许我的频道文件实现错了?

更新了代码

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '<myid>', // App ID
            channelUrl : '//tabletr.herokuapp.com/channel.php', // Channel File
            status     : false, // Check login status
            cookie     : true, // Enable cookies to allow the server to access the session
            xfbml      : false  // Parse XFBML
        });

        // Additional initialization code here
        FB.Canvas.setSize({ height: 1200 });
    };

    // If I comment out this function I don't get any unsafe URL errors
    // anymore. I'm guessing that the include of the JavaScript code either
    // fails to use the right protocol or is faulty in its implementation
    // by Facebook. My money is on the former.
    (function(d){
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        //js.src = "//tabletr.herokuapp.com/js/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    }(document));
</script>

我已根据Stack OVerflow问题 Facebook JavaScript SDK over HTTPS loading non-secure items 更新了我的代码 - 但是,这还没有解决问题。我在2012-01-19发现了以下错误报告,其中显示了我面临的相同症状。越过这个手指将很快被Facebook修复!

https://developers.facebook.com/bugs/192507854181725?browse=search_4f2bbd593f8798794293016

3 个答案:

答案 0 :(得分:3)

 //js.src = "//connect.facebook.net/en_US/all.js";
 js.src = "//tabletr.herokuapp.com/js/all.js";

您似乎将http://connect.facebook.net/en_US/all.js复制到本地服务器 https://tabletr.herokuapp.com/js/all.js

http://connect.facebook.net/en_US/all.jshttps://connect.facebook.net/en_US/all.js的差异显示了几个分别在其中硬编码“http”和“https”的网址。如果你想在本地复制那些,那么你将需要托管两个独立的版本,比如Facebook。

但我建议只指一下官方的Facebook脚本,这样你就不必一直同步了。

答案 1 :(得分:0)

完全可能。

您的错误消息指出:

  

域,协议和端口必须匹配

您正在使用

中包含的脚本访问框架
  

https://apps.facebook.com/tabletr/

来自带有网址

的框架
  

http://static.ak.facebook.com/connect/canvas_proxy.php? ...

所以肯定看起来像http / https不匹配。我认为这不会扩展到子域,但这可能会有问题。

但这是你的代码还是框架?基本上,您需要确保两种协议在安全或常规浏览方案中匹配。

答案 2 :(得分:0)

Facebook已承认这是一个错误并分配给工程师。您可以在https://developers.facebook.com/bugs/192507854181725?browse=search_4f2bbd593f8798794293016

跟踪进度