Jak wyłączyć CSP w Firefoksie tylko dla bookmarkletów?
26
Dzisiaj zauważyłem, że nie jestem w stanie uruchomić bookmarkletów na https://github.com/ z powodu ograniczeń Content Security Policy (CSP). Czy istnieje sposób na wyłączenie CSP w Firefoksie tylko dla bookmarketów, a nie wszystkiego innego?
Zauważyłem security.csp.enableopcję w about:config, ale to całkowicie wyłączałoby CSP. Następujący komunikat jest rejestrowany w konsoli podczas aktywacji bookmarkletu:
Możesz spróbować przekonwertować swoje bookmarklety na skrypty użytkownika GreaseMonkey. Działają w uprzywilejowanym środowisku i nie podlegają CSP.
Jednak oczywiście zamierzenia skryptów użytkownika i skryptozakładek są różne - skrypty użytkownika uruchamiają się automatycznie, a skryptozakładki na żądanie. Możesz to obejść, np. Tworząc <button>skrypt użytkownika, dołączając go do strony i ustawiając onclickdetektor zdarzeń na tym przycisku, aby uruchamiał kod bookmarkletu.
Kod powinien wyglądać następująco:
// ==UserScript==// @name Name// @description Description// @version 0.1// @namespace example.Lekensteyn// @grant none// @include http*://github.com/*/*/commit/*// ==/UserScript==var myBookmarklet =function(){// here goes the code of the bookmarklet};var newButton = document.createElement('button');
newButton.innerHTML ='Execute my bookmarklet';
newButton.addEventListener('click',function(evt){
myBookmarklet();});
document.getElementById('someElement').appendChild(newButton);
Zaczerpnąłem prawie dosłownie z mojego skryptu użytkownika, który jest również skierowany do GitHub. Możesz debugować skrypty użytkownika w Firebug za pomocą debugger;słowa kluczowego w skrypcie.
Zauważ jednak, że sam Firebug również podlega CSP, więc nie możesz np. Wykonywać kodu w konsoli (ale możesz sprawdzać skrypty użytkowników w trybie „tylko do odczytu”). Ten błąd rozwiązuje ten problem .
Funkcja na żądanie jest bardzo ważna. Mam bookmarklety, które wstawiają szybki eval-textarea z niektórymi funkcjami, które nie wypełniają dużej części strony, jedną do tworzenia kodu QR dla bieżącej strony i innymi mniejszymi częściami. Nie są one specyficzne dla GH. Moc zakładek jest taka, że można je bardzo łatwo tworzyć i usuwać. GreaseMonkey został już zainstalowany, ale to nie rozwiąże problemu CSP. Dzięki za sugestie, być może rozwiązanie Firebug przyniesie również korzyść w przypadku bookmarkletów.
Lekensteyn,
4
Niestety poprawka Firebug naprawi tylko samą Firebug. Z wpisu na blogu Github na temat CSP : Jak wynika ze specyfikacji CSP, CSP nie powinno mieć wpływu na bookmarklety przeglądarki. (..) Ale żadna z przeglądarek nie dostała tego poprawnie. Wszystkie powodują naruszenia CSP i uniemożliwiają działanie bookmarkletu. Być może powinieneś dokładnie zbadać sprawę i zgłosić problem w Bugzilli.
jakub.g
2
BTW możesz użyć GM_registerMenuCommand, aby wywołać funkcję na żądanie. Nie zapomnij @grant GM_registerMenuCommand. Dodaje wpis do menu Greasemonkey, dostępny pod (GM logo) > User Script Command.... W ten sposób możesz łatwo przekonwertować swoje bookmarklety na skrypty użytkowników.
jakub.g
Nie rozumiem ... utworzenie przycisku na stronie, aby załadować kod po kliknięciu, nie działa, nadal zgłasza wyjątek CSP
Michael
7
Github mówi, że powinien działać zgodnie ze specyfikacją, ale żadna przeglądarka nie działa poprawnie:
Dla przypomnienia, istnieje inny błąd Firefoksa, szczególnie w zakresie podstawowej funkcjonalności bookmarkletu (mniej prawdopodobne, że
utknie
Aby zapisać innym kliknięcie, błąd 1478037 wspomniany przez @djpohly w powyższym komentarzu dotyczy umożliwienia działania bookmarkletów, o ile nie obciążają one zasobów zewnętrznych.
waldyrious
1
Wiele odpowiedzi poleca skrypty użytkownika (takie jak TamperMonkey lub GreaseMonkey), ale chcę pamiętać, że niektóre strony znajdują się na czarnej liście z jakiegoś powodu z powodu tych rozszerzeń. (Oczywiście, możesz zastąpić czarną listę, ale twórcy mieli na myśli bezpieczeństwo i zablokowali te strony).
Na przykład chciałem użyć bookmarkletu, aby szybko przejść do ReviewMeta z dowolnego wpisu Amazon, ale Amazon zablokował niezabezpieczone źródła skryptów (aktualizacja: nie został zablokowany, ale nie miałem włączonego skryptu, szkoda). Rozszerzenia skryptów użytkownika są domyślnie umieszczone na czarnej liście w witrynach bankowych i sklepowych, aby zapobiec instalowaniu / używaniu skryptów złośliwych użytkowników.
(PS. Nie jest to odpowiedź sama w sobie, ale pomyślałem, że warto o tym pamiętać, zanim zdobędziesz skrypt użytkownika, aby znaleźć stronę na czarnej liście i waham się przed jej usunięciem z listy).
Utworzyłem obejście tego problemu za pomocą skryptu użytkownika Greasemonkey (w przeglądarce Firefox). Możesz teraz mieć bookmarklety na wszystkich stronach CSP i https: //, a także mieć bookmarklety w ładnym, łatwo edytowalnym pliku bibliotecznym, zamiast być pojedynczo ułożonymi w zakładkę.
Jeśli chcesz uruchomić swoje bookmarklety na stronach internetowych obsługujących CSP w Firefoksie, możesz użyć arkuszy stylów CSS, zobacz moją odpowiedź na StackOverflow .
@grant GM_registerMenuCommand
. Dodaje wpis do menu Greasemonkey, dostępny pod(GM logo) > User Script Command...
. W ten sposób możesz łatwo przekonwertować swoje bookmarklety na skrypty użytkowników.Github mówi, że powinien działać zgodnie ze specyfikacją, ale żadna przeglądarka nie działa poprawnie:
https://github.com/blog/1477-content-security-policy#bookmarklets
Powinieneś otworzyć błąd w swojej ulubionej przeglądarce dotyczący tego problemu lub zagłosować na:
źródło
Wiele odpowiedzi poleca skrypty użytkownika (takie jak TamperMonkey lub GreaseMonkey), ale chcę pamiętać, że niektóre strony znajdują się na czarnej liście z jakiegoś powodu z powodu tych rozszerzeń. (Oczywiście, możesz zastąpić czarną listę, ale twórcy mieli na myśli bezpieczeństwo i zablokowali te strony).
Na przykład chciałem użyć bookmarkletu, aby szybko przejść do ReviewMeta z dowolnego wpisu Amazon, ale Amazon zablokował niezabezpieczone źródła skryptów (aktualizacja: nie został zablokowany, ale nie miałem włączonego skryptu, szkoda). Rozszerzenia skryptów użytkownika są domyślnie umieszczone na czarnej liście w witrynach bankowych i sklepowych, aby zapobiec instalowaniu / używaniu skryptów złośliwych użytkowników.
(PS. Nie jest to odpowiedź sama w sobie, ale pomyślałem, że warto o tym pamiętać, zanim zdobędziesz skrypt użytkownika, aby znaleźć stronę na czarnej liście i waham się przed jej usunięciem z listy).
źródło
Utworzyłem obejście tego problemu za pomocą skryptu użytkownika Greasemonkey (w przeglądarce Firefox). Możesz teraz mieć bookmarklety na wszystkich stronach CSP i https: //, a także mieć bookmarklety w ładnym, łatwo edytowalnym pliku bibliotecznym, zamiast być pojedynczo ułożonymi w zakładkę.
Zobacz: https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J
źródło
Jeśli chcesz uruchomić swoje bookmarklety na stronach internetowych obsługujących CSP w Firefoksie, możesz użyć arkuszy stylów CSS, zobacz moją odpowiedź na StackOverflow .
źródło