使用Websocket的Firefox附加SDK扩展不适用于Facebook / Twitter

时间:2016-04-25 08:05:25

标签: firefox websocket firefox-addon firefox-addon-sdk content-security-policy

我正在开发基于Addon SDK的Firefox扩展程序。 在我的内容脚本中,我需要使用wss创建与我的localhost服务器的WebSocket连接。 在我的插件脚本(index.js)中,我使用“sdk / tabs”注入内容脚本。

var tabs = require("sdk/tabs");
tabs.on("ready", function(tab){
     var worker = tab.attach({
         contentScriptFile: ["./websocket.js"]
     });
});

data / websocket.js看起来像:

websocket = new WebSocket("wss://localhost:8443/WebsocketServer/");
websocket.onopen = function(evt){
                       console.log("connection open");
                       websocket.send("connection established!");
                   };
websocket.onmessage = function(evt){
                          console.log("message received: "+evt.data);
                   };

我打开firefox并用https://localhost:8443/打开一个页面并接受证书。所以证书在这里不会有问题。

我可以打开一个普通的http页面,这个插件工作得很好,与我的websocket服务器对话。如果我打开https://google.com,我也可以使它工作。 但是当我打开https://www.facebook.comhttps://www.twitter.com时,无法建立websocket连接。

当我打开开发者控制台时,我可以看到错误消息:

Content Security Policy: The page's settings blocked the loading of a 
resource at wss://localhost:8443/WebsocketServer/ ("connect-src 
https://graph.facebook.com https://*.giphy.com https://pay.twitter.com 
https://analytics.twitter.com https://media.riffsy.com 
https://upload.twitter.com https://api.mapbox.com https://twitter.com").


Content Security Policy: The page's settings blocked the loading of a   
resource at wss://localhost:8443/WebsocketServer/ ("connect-src    
https://*.facebook.com https://*.fbcdn.net https://*.facebook.net 
https://*.spotilocal.com:* https://*.akamaihd.net wss://*.facebook.com:* 
https://fb.scanandcleanlocal.com:* https://*.atlassolutions.com 
https://attachment.fbsbx.com ws://localhost:* blob:").

检查后,发现facebook和twitter都在其http标头中实现了内容脚本策略: https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Introducing_Content_Security_Policy

但我认为这项政策应该免除附加费。我怎么能绕过这个检查并使我的websocket连接也能在facebook和twitter上运行呢?

我发现有一个链接使用XPCOMM来hyjack http头并绕过CSP检查,但这不是我想要的,因为XPCOMM将被firefox弃用。有没有更合适的方法呢?

非常感谢!

0 个答案:

没有答案