Wie deaktiviere ich CSP in Firefox nur für Lesezeichen?

26

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

Mir ist die security.csp.enableOption in aufgefallen 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:...
Lekensteyn
quelle

Antworten:

8

Sie können versuchen, Ihre Lesezeichen in GreaseMonkey- Benutzerskripte zu konvertieren . Sie werden in einer privilegierten Umgebung ausgeführt und unterliegen nicht dem CSP.

Die Absichten von User-Skripten und Bookmarklets sind natürlich unterschiedlich - User-Skripten werden automatisch ausgeführt, während Bookmarklets bei Bedarf verfügbar sind. Sie können dies umgehen, indem Sie z. B. <button>im UserScript ein erstellen, an die Seite anhängen und einen onclickEreignis-Listener für diese Schaltfläche festlegen, um den Code des Bookmarklets auszulösen.

Code sollte so aussehen:

// ==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 mit dem debugger;Schlüsselwort im Skript debuggen .

Beachten Sie jedoch, dass Firebug selbst vorerst ebenfalls 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 .

jakub.g
quelle
1
Die On-Demand- Funktion ist sehr wichtig. Ich habe Lesezeichen, die einen schnellen Auswertungs-Textbereich mit einigen Funktionen einfügen, die einen großen Teil der Seite nicht ausfüllen, einen zum Erstellen eines QR-Codes für die aktuelle Seite und einige andere kleinere Teile. Diese sind nicht GH-spezifisch. Die Stärke von Lesezeichen besteht darin, dass sie sehr einfach erstellt und entfernt werden können. GreaseMonkey wurde bereits installiert, aber das wird das CSP-Problem nicht lösen. Vielen Dank für die Vorschläge, vielleicht wird eine Lösung für Firebug auch für Bookmarklets von Nutzen sein.
Lekensteyn
4
Leider wird der Firebug-Fix nur den Firebug selbst reparieren. Aus dem Github-Blogeintrag zu CSP : Wie aus der CSP-Spezifikation hervorgeht, sollten Browser-Lesezeichen nicht von CSP betroffen sein. (..) Aber keiner der Browser versteht das richtig. Alle verursachen CSP-Verstöße und verhindern, dass das Lesezeichen funktioniert. Vielleicht sollten Sie den Fall genauer untersuchen und ein Problem in Bugzilla melden.
jakub.g
2
Übrigens können Sie GM_registerMenuCommand verwenden , um einen Funktionsaufruf nach Bedarf auszuführen . Vergessen Sie nicht @grant GM_registerMenuCommand. Es fügt dem Greasemonkey-Menü einen Eintrag hinzu, der unter zugänglich ist (GM logo) > User Script Command.... Auf diese Weise können Sie Ihre Lesezeichen einfach in Benutzerskripte konvertieren.
jakub.g
Ich verstehe nicht ... das Erstellen einer Schaltfläche auf der Seite zum Laden des Codes, wenn darauf geklickt wird, funktioniert nicht, es wird dennoch eine CSP-Ausnahme
Michael
7

Github sagt, dass es nach der Spezifikation funktionieren sollte, aber kein Browser bekommt es richtig:

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

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

Cweiske
quelle
2
Für die Aufzeichnung gibt es einen weiteren Firefox-Fehler, der speziell für die grundlegenden Lesezeichenfunktionen gedacht ist
gerät
Um anderen den Klick zu ersparen, geht es im Fehler 1478037, der von @djpohly im obigen Kommentar erwähnt wurde, darum, Lesezeichen laufen zu lassen, solange sie keine externen Ressourcen laden.
Waldyrious
1

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 schwarze Liste überschreiben, aber die Entwickler hatten Sicherheit im Sinn und haben diese Seiten gesperrt).

Zum Beispiel wollte ich ein Lesezeichen verwenden, um schnell von einem Amazon-Eintrag zu ReviewMeta zu gelangen, aber Amazon hat unsichere Skriptquellen blockiert (Update: Es wurde nicht blockiert, aber ich hatte kein Skript aktiviert, es ist eine Schande). Die Benutzerskripterweiterungen werden standardmäßig auf Bank- und Einkaufsseiten auf die schwarze Liste gesetzt, um zu verhindern, dass böswillige Benutzerskripte installiert / verwendet werden.

(PS: Dies ist an sich keine Antwort, aber ich dachte, es wäre nützlich, dies zu bedenken, bevor Sie ein User-Skript in die Hand nehmen, um die Seite auf der schwarzen Liste zu finden und zu zögern, die schwarze Liste aufzuheben.)

DBX12
quelle
0

Ich habe ein Workaround "Fix" für dieses Problem mithilfe eines Greasemonkey-Benutzerskripts (in Firefox) erstellt. Sie können jetzt Lesezeichen auf allen CSP- und https: // -Sites speichern und Ihre Lesezeichen in einer ansprechenden, einfach zu bearbeitenden Bibliotheksdatei speichern, anstatt sie einzeln als Lesezeichen zu speichern.

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

William Donnelly
quelle
-1

Wenn Sie Ihre Lesezeichen auf CSP-fähigen Websites in Firefox ausführen möchten, können Sie CSS-Stylesheets verwenden. Weitere Informationen finden Sie unter Meine Antwort auf StackOverflow .

Niutech
quelle