Czy Mozillas csp blok do wykonania JavaScript z zakładki domyślnie?

Czy można to skonfigurować do tego?

20
PiTheNumber 30 wrzesień 2011, 12:03

4 odpowiedzi

Najlepsza odpowiedź

Od 2017 r. Odpowiedź jest nadal ostatecznym "może" - tak jak gdy ta odpowiedź została pierwotnie opublikowana w 2011 r. Oczywiście mówi:

Polityka egzekwowana na zasobach nie powinna zakłócać funkcjonowania funkcji agenta użytkownika, takich jak dodatki, rozszerzenia lub bookmarketki.

I to rzeczywiście zachowanie widzę w Chrome 61: Bookmarklet uruchomi się na https://addons.mozilla.org/, strona, która ma ścisłą politykę bezpieczeństwa treści bez script-src: 'unsafe-inline'. Jednak w Firefoksie 56 Bookmarklets nie będą działać na tej stronie, a naruszenie CSP jest zgłaszane.

Istnieje bardzo długa dyskusja na temat tej kwestii w Raport błędów Firefox, w Szczególne łączenie do Podobna dyskusja na specyfikacji W3C. Tak więc na razie nie możesz naprawdę polegać na nienaruszonych zabywaniu przez CSP. Zawsze możesz wyłączyć CSP całkowicie, ale jest to jedna ważna warstwa ochronna mniej dla Ciebie.

20
Wladimir Palant 11 październik 2017, 18:47

Zachowanie jest określone w Mozillas Wiki.

CSP nie powinien kolidować z działaniem skryptów dostarczanych przez użytkownika (takich jak dodatki do przeglądarki i zabytkowe).

Spójrz tutaj: https://wiki.mozilla.org/security/csp/Specification#non-Normatywne_Client-side_conSividerations .

5
sfx 3 grudzień 2012, 21:07

Tak, CSP blokuje bookmarketki w Mozilli Firefox. Jest Bug o IT.

Możesz jednak ominąć ten ograniczenie, wstrzykiwanie kodu JS do zewnętrznego stylu CSS, jak mój TOP News Feed BookMarklet robi:

Zewnętrzne CSS:

#topnewsfeed { font-family: '(function(){/*payload*/})()'; }

Bookmarklet JS:

(function() {
    var a = document.createElement("link");
    a.rel = "stylesheet";
    a.href = "//niutech.github.io/topnewsfeed/topnewsfeed.css";
    a.onload = function() {
        var a = b.currentStyle ? b.currentStyle.fontFamily : document.defaultView.getComputedStyle(b, null).fontFamily;
        eval(a.replace(/^["']|\\|["']$/g, ""));
    };
    document.body.appendChild(a);
    var b = document.createElement("div");
    b.id = "topnewsfeed";
    document.body.appendChild(b);
})()

Bookmarklet ładuje plik CSS zawierający kod JS, dodaje element stylizowany przez ten CSS, odczytuje atrybut stylu elementu i eval kod.

3
Alex78191 21 listopad 2017, 17:25

Stworzyłem pracę "Fix" dla tego problemu za pomocą aplikacji Grèsonkey (w Firefoksie). Możesz teraz mieć aktualizację na wszystkich witrynach CSP i HTTPS: //, plus mieć swoje uluboczeki w ładnym, łatwo edytowalnym pliku bibliotecznym, zamiast być indywidualnie ocenianym w zakładce.

Zobacz: https://groups.google.com/d/msg/greasonkey -Users / mw61ynw5orc / gl_bnuhtsq0j

0
Bill D 9 maj 2015, 04:37