So deaktivieren Sie CSP in Firefox nur für Bookmarklets

10190
Lekensteyn

Heute habe ich festgestellt, dass ich aufgrund von Einschränkungen der Content-Security-Richtlinie (CSP) keine Bookmarklets auf https://github.com/ ausführen kann. Gibt es eine Möglichkeit, CSP in Firefox nur für Bookmarklets zu deaktivieren, und nicht alles andere?

Ich habe die security.csp.enableOption in bemerkt about:config, aber dies würde CSP vollständig deaktivieren. Die folgende Meldung wird beim Aktivieren eines Bookmarklets in der Konsole protokolliert:

Timestamp: 04/22/2013 02:39:05 PM Warning: CSP WARN: Directive inline script base restriction violated  Source File: https://github.com/ Line: 0 Source Code: javascript:... 
22

5 Antworten auf die Frage

7
cweiske

Github sagt, dass es laut Spezifikation funktionieren sollte, aber kein Browser hat es richtig gemacht:

https://github.com/blog/1477-content-security-policy#bookmarklets

Sie sollten einen Fehler für Ihren Lieblingsbrowser für dieses Problem öffnen oder dafür stimmen:

Für das Protokoll gibt es einen weiteren Firefox-Fehler, der speziell für die grundlegende Bookmarklet-Funktion gedacht ist (in der Diskussion ist die Wahrscheinlichkeit geringer, dass er sich verkeilt): https://bugzilla.mozilla.org/show_bug.cgi?id=1478037 djpohly vor 5 Jahren 1
Um anderen den Klick zu retten, betrifft der durch @djpohly erwähnte Fehler 1478037 in dem Kommentar oben, dass Bookmarklets ausgeführt werden dürfen, solange sie keine externen Ressourcen laden. waldyrious vor 5 Jahren 0
6
jakub.g

Sie können versuchen, Ihre Bookmarklets in GreaseMonkey- Benutzerskripte zu konvertieren . Sie laufen in einer privilegierten Umgebung und unterliegen keinem CSP.

Die Absichten von Benutzerskripten und Bookmarklets sind jedoch natürlich unterschiedlich - Benutzerscripts werden automatisch ausgeführt, während Bookmarklets bei Bedarf verwendet werden. Sie können dies umgehen, indem Sie z. B. <button>im Userscript ein erstellen, an die Seite anhängen und onclickauf dieser Schaltfläche einen Ereignis-Listener festlegen, um den Code des Bookmarklets auszulösen.

Code sollte so gehen:

// ==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); 

Fast wörtlich genommen aus meinem Userscript, das auch GitHub anspricht . Sie können Benutzerskripte in Firebug mithilfe des debugger;Schlüsselworts im Skript debuggen .

Beachten Sie jedoch, dass Firebug selbst vorerst auch CSP unterliegt, sodass Sie beispielsweise keinen Code in der Konsole ausführen können (Sie können jedoch Ihre Benutzerskripte im schreibgeschützten Modus überprüfen). Dies wird in diesem Fehler behoben .

Die Funktion * on-demand * ist sehr wichtig. Ich habe Bookmarklets, die einen schnellen Auswertungsbereich mit einigen Funktionen einfügen, die nicht den Großteil der Seite ausfüllen, einen für das Erstellen eines QR-Codes für die aktuelle Seite und einige andere kleinere Teile. Diese sind nicht GH-spezifisch. Die Stärke von Bookmarklets besteht darin, dass sie sehr einfach erstellt und entfernt werden können. GreaseMonkey wurde bereits installiert, was das CSP-Problem jedoch nicht lösen kann. Danke für die Vorschläge, vielleicht ist eine Lösung für Firebug auch für Bookmarklets von Nutzen. Lekensteyn vor 10 Jahren 1
Leider wird der Firebug-Fix nur Firebug selbst beheben. Aus [Github-Blogeintrag in CSP] (https://github.com/blog/1477-content-security-policy): * Wie aus der CSP-Spezifikation hervorgeht, sollten Browser-Bookmarklets nicht von CSP betroffen sein. (..) Aber keiner der Browser bekommt das richtig. Alle verursachen CSP-Verstöße und verhindern, dass das Bookmarklet funktioniert. * Vielleicht sollten Sie den Fall genauer untersuchen und ein Problem mit Bugzilla melden. jakub.g vor 10 Jahren 4
BTW you can use [GM_registerMenuCommand](http://wiki.greasespot.net/GM_registerMenuCommand) to make a function invocation on-demand. Don't forget `@grant GM_registerMenuCommand`. It adds entry to Greasemonkey menu, accesible under `(GM logo) > User Script Command...`. That way you can easily convert your bookmarklets into userscripts. jakub.g vor 10 Jahren 2
Ich verstehe nicht ... das Erstellen einer Schaltfläche auf der Seite zum Laden des Codes, wenn geklickt wird, funktioniert nicht, es wird immer noch eine CSP-Ausnahme ausgelöst Michael vor 9 Jahren 0
1
DBX12

Viele Antworten empfehlen Benutzerskripte (wie TamperMonkey oder GreaseMonkey), aber ich möchte daran erinnern, dass einige Seiten aus einem bestimmten Grund von diesen Erweiterungen auf die schwarze Liste gesetzt werden. (Sicher, Sie können die Blacklisting außer Kraft setzen, aber die Entwickler hatten Sicherheitsaspekte und haben diese Seiten gesperrt).

Ich wollte zum Beispiel ein Bookmarklet verwenden, um schnell von jedem Amazon-Eintrag zu ReviewMeta zu gelangen, aber Amazon blockierte unsichere Skriptquellen (Update: es wurde nicht blockiert, aber ich hatte kein Skript, das ist eine Schande). Die Benutzerskripterweiterungen werden standardmäßig auf Banken- und Einkaufsseiten auf die schwarze Liste gesetzt, um zu verhindern, dass böswillige Benutzerskripts installiert / verwendet werden.

(PS Dies ist keine Antwort per se, aber ich dachte, es wäre nützlich, dies zu berücksichtigen, bevor Sie ein Benutzer-Skript in die Hände bekommen, nur um die Seite auf die schwarze Liste zu setzen und zögern, die schwarze Liste aufzuheben.)

0
William Donnelly

Ich habe ein Problemumgehung für dieses Problem mithilfe eines Greasemonkey-Benutzerskripts (in Firefox) erstellt. Sie können jetzt Bookmarklets auf allen CSP- und https: //-Sites einrichten sowie Ihre Bookmarklets in einer schönen, leicht bearbeitbaren Bibliotheksdatei speichern, anstatt einzeln in ein Lesezeichen eingefügt zu werden.

Siehe: https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J

-1
niutech

Wenn Sie Ihre Bookmarklets auf CSP-fähigen Websites in Firefox ausführen möchten, können Sie CSS-Stylesheets verwenden. Siehe meine Antwort zu StackOverflow .