Il blocco Mozillas CSP per eseguire Javascript from a bookmark per impostazione predefinita?La politica di Content Security blocca i bookmarklet?
Può essere configurato per farlo?
Il blocco Mozillas CSP per eseguire Javascript from a bookmark per impostazione predefinita?La politica di Content Security blocca i bookmarklet?
Può essere configurato per farlo?
A partire dal 2017, la risposta è ancora un definitivo "forse" - proprio come quando questa risposta è stato originariamente pubblicato nel 2011. Il specification dice chiaramente:
politica forzata su una risorsa non dovrebbe interferire con il operazione di funzioni utente-agente come add-on, estensioni o bookmarklets.
E questo è davvero il comportamento che vedo in Chrome 61: un bookmarklet verrà eseguito su https://addons.mozilla.org/, un sito che ha una politica rigorosa sicurezza dei contenuti, senza script-src: 'unsafe-inline'
. Tuttavia in Firefox 56 i bookmarklet non verranno eseguiti su questo sito Web e viene segnalata una violazione CSP.
C'è una discussione molto lunga su questo problema nel Firefox bug report, in particolare il collegamento a un similar discussion on the W3C spec. Quindi, al momento, non puoi davvero fare affidamento sul fatto che i bookmarklet non siano influenzati da CSP. Puoi sempre disabilitare CSP completamente, ma questo è uno strato di protezione importante meno per te.
Grazie per aver testato questo! MA puoi semplicemente cambiare CSP se vuoi. Apri about: config e imposta "security.csp.enable" su "false". Quindi sarai in grado di gestire i tuoi opuscoli comunque. – PiTheNumber
@PiTheNumber: la mia risposta dice già che è possibile disattivare CSP e consiglia di non farlo. –
Spiacente, non ti ho visto modificare quando stavo scrivendo il commento. – PiTheNumber
Il comportamento è specificato nel wiki mozillas.
CSP non deve interferire con l'operazione degli script forniti dall'utente (come componenti aggiuntivi del browser e bookmarklet).
Date un'occhiata qui: https://wiki.mozilla.org/Security/CSP/Specification#Non-Normative_Client-Side_Considerations
Sì, i CSP blocchi bookmarklet in Mozilla Firefox. C'è un bug about it.
Tuttavia, è possibile aggirare questa limitazione iniettando il codice JS in un foglio di stile CSS esterno, come il mio Top News Feed bookmarklet fa:
esterno 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);
})()
Il bookmarklet carica un file CSS contenente codice JS, aggiunge un elemento con questo CSS, legge l'attributo stile elemento e eval
il codice.
'Rifiutato di caricare il foglio di stile 'https: //
Ho creato una soluzione "completa" per risolvere questo problema utilizzando un userscript Greasemonkey (in Firefox). Ora puoi avere bookmarklets su tutti i siti CSP e https: //, oltre ad avere i bookmarklets in un file di libreria piacevole e facilmente modificabile invece di essere singolarmente schiacciati in un segnalibro.
See: https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J
Questo metodo non funziona perché il bookmarklet non può essere eseguito (bookmarklet =' unsafe-inline') – mems
solo curiosità, perché si vuole disabilitare bookmarklets? – ThiefMaster
Non mi preoccupo solo che qualcun altro possa farlo perché non vogliono che Javascript venga iniettato nella pagina web. – PiTheNumber
Ci sono sempre cose come greasemonkey. Se l'utente ** decide che vuole iniettare javascript nel sito Web che si limiterà a influenzare se stesso, nessuno ha il diritto di impedirgli di farlo. – ThiefMaster