簡體   English   中英

如何在Firefox加載項中覆蓋Facebook CSP

[英]How to override Facebook CSP in Firefox Add-on

Facebook必須在其“ 內容安全策略”標頭中進行了更改,因為我的Firefox加載項突然停止工作。

我需要使用XMLHttpRequest獲取一個遠程XML文件,並且我的域當然不包含在Facebook CSP中(在Firefox控制台中,該頁面的connect-src策略出現錯誤)。 直到今天,它一直像魅力一樣運轉。

毫無疑問,Firefox加載項不應該受服務器CSP的影響(理論上是這樣)。

因此,我需要重寫Facebook的CSP才能使我的附加組件重新工作。 我找到了這段代碼,但這是針對Chrome擴展程序的

chrome.webRequest.onHeadersReceived.addListener(function (details)
{
    for (i = 0; i < details.responseHeaders.length; i++) {
        if (details.responseHeaders[i].name.toUpperCase() == "X-WEBKIT-CSP") {
            details.responseHeaders[i].value = "default-src *;script-src https://*.feedhound.co https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net https://*.feedhound.co";
        }
    }
    return {
        responseHeaders : details.responseHeaders
    };
}, {
    urls : ["*://*.facebook.com/*"],
    types : ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]
},
    ["blocking", "responseHeaders"]
);

有人可以幫助我為Firefox附件實現類似的功能嗎?

我已經嘗試了一種替代方法,使用setRequestHeader添加我自己的“ content-src”安全標頭,但沒有任何運氣。

謝謝羅伯托

謝謝,在此期間,我嘗試了類似的解決方案,但很不幸,我發現Mozilla 不允許使用該解決方案(我的修復程序已被審閱者拒絕)。

問題在於,通過使用setResponseHeader設置新的服務器響應來修改CSP標頭可能會導致安全問題。

我猜唯一可以接受的解決方案是在chrome中運行代碼,而不是在內容中運行,因此它不會受到服務器CSP的影響。

這是我的解決辦法:

var MYADDON_CSP_listener = {
observe : function(aSubject, aTopic, aData) {
  if (aTopic == "http-on-examine-response") {
    let url;

    aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);
    url = aSubject.URI.spec;

    if (/https?:\/\/www.facebook.com\//.test(url)) {

        var csp = aSubject.getResponseHeader("content-security-policy");
        csp = csp.replace('connect-src', 'connect-src http://*.mywebsite.com https://*.mywebsite.com');
        aSubject.setResponseHeader("content-security-policy", csp, false);

    } 
  }
}
};
var MYADDON_observerService = Components.classes["@mozilla.org/observer-service;1"]
                                .getService(Components.interfaces.nsIObserverService);
MYADDON_observerService.addObserver(MYADDON_CSP_listener, "http-on-examine-response", false);

我有同樣的問題,並能夠解決。 看看我在這里發布的解決方案https://stackoverflow.com/a/19917664/297113

那可能對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM