Come disabilitare CSP in Firefox solo per i bookmarklet?


26

Oggi ho notato che non sono in grado di eseguire bookmarklet su https://github.com/ a causa delle restrizioni di Content Security Policy (CSP). Esiste un modo per disabilitare CSP in Firefox solo per i bookmarklet e non per tutto il resto?

Ho notato l' security.csp.enableopzione in about:config, ma questo disabiliterebbe CSP completamente. Il seguente messaggio viene registrato sulla console quando si attiva un bookmarklet:

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:...

Risposte:


8

Puoi provare a convertire i tuoi bookmarklet in script utente GreaseMonkey . Funzionano in un ambiente privilegiato e non sono soggetti a CSP.

Tuttavia, naturalmente le intenzioni di script utente e bookmarklet sono diverse: gli script utente vengono eseguiti automaticamente mentre i bookmarklet sono su richiesta. È possibile aggirare questo, ad esempio creando un <button>nello script utente, aggiungendolo alla pagina e impostando un onclicklistener di eventi su quel pulsante per attivare il codice del bookmarklet.

Il codice dovrebbe andare così:

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

Tratto quasi letteralmente dal mio script utente che si rivolge anche a GitHub. Puoi eseguire il debug debugger;degli script utente in Firebug usando la parola chiave nello script.

Si noti tuttavia che Firebug stesso è per ora soggetto anche a CSP, quindi non è possibile ad esempio eseguire il codice nella console (ma è possibile ispezionare i propri script utente in modalità "sola lettura"). Questo problema viene risolto in questo errore .


1
La funzione su richiesta è molto importante. Ho dei bookmarklet che inseriscono una rapida area di valutazione con alcune funzionalità che non riempiono gran parte della pagina, una per la creazione di un codice QR per la pagina corrente e altre parti più piccole. Quelli non sono specifici di GH. Il potere dei bookmarklet è che possono essere creati e rimossi molto facilmente. GreaseMonkey era già installato, ma questo non risolverà il problema CSP. Grazie per i suggerimenti, forse una soluzione per Firebug sarà utile anche per i bookmarklet.
Lekensteyn,

4
Sfortunatamente la correzione di Firebug risolverà solo Firebug stesso. Dal post di blog Github su CSP : Come chiarito dalle specifiche CSP, CSP non dovrebbe essere influenzato dai bookmarklet del browser. (..) Ma nessuno dei browser lo capisce correttamente. Tutti causano violazioni del CSP e impediscono il funzionamento del bookmarklet. Forse dovresti indagare sul caso in modo più approfondito e segnalare un problema su Bugzilla.
jakub.g,

2
A proposito, puoi usare GM_registerMenuCommand per effettuare una chiamata di funzione su richiesta. Non dimenticare @grant GM_registerMenuCommand. Aggiunge voce al menu Greasemonkey, accessibile sotto (GM logo) > User Script Command.... In questo modo puoi facilmente convertire i tuoi bookmarklet in script utente.
jakub.g

Non capisco ... la creazione di un pulsante nella pagina per caricare il codice quando si fa clic non funziona, genera comunque un'eccezione CSP
Michael

7

Github dice che dovrebbe funzionare secondo le specifiche, ma nessun browser funziona bene:

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

Dovresti aprire un bug per il tuo browser preferito per questo problema o votarlo:


2
Per la cronaca, c'è un altro bug di Firefox specifico per la funzionalità di base dei bookmarklet (meno probabilità di impantanarsi nella discussione): bugzilla.mozilla.org/show_bug.cgi?id=1478037
djpohly

Per salvare il clic degli altri, il bug 1478037 citato da @djpohly nel commento sopra riguarda l'esecuzione di bookmarklet purché non caricino risorse esterne.
waldyrious

1

Molte risposte raccomandano gli script utente (come TamperMonkey o GreaseMonkey) ma voglio ricordare che alcune pagine sono inserite nella lista nera per un motivo da queste estensioni. (Certo, puoi ignorare la lista nera, ma gli sviluppatori avevano in mente la sicurezza e hanno bloccato queste pagine).

Ad esempio, volevo utilizzare un bookmarklet per passare rapidamente a ReviewMeta da qualsiasi elenco di Amazon, ma Amazon ha bloccato le fonti di script non sicure (aggiornamento: non era bloccato, ma non avevo script, è un peccato). Le estensioni degli script utente sono inserite nella blacklist sui siti bancari e commerciali per impostazione predefinita per impedire l'installazione / l'utilizzo di script di utenti malintenzionati.

(PS Questa non è una risposta in sé, ma ho pensato che sarebbe stato utile tenerlo a mente prima di mettere le mani su uno script utente solo per trovare la pagina nella lista nera ed esitare a non inserirla nella lista nera.)



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.