Comment désactiver CSP dans Firefox uniquement pour les bookmarklets?
23
Aujourd'hui, j'ai remarqué que je ne pouvais pas exécuter de bookmarklets sur https://github.com/ en raison des restrictions de la politique de sécurité du contenu (CSP). Existe-t-il un moyen de désactiver CSP dans Firefox uniquement pour les bookmarklets, et pas pour le reste?
J'ai remarqué le security.csp.enable option dans about:config, mais cela désactiverait le CSP
complètement. Le message suivant est consigné sur la console lors de l'activation d'un bookmarklet:
Vous pouvez essayer de convertir vos bookmarklets en Mécano scripts d'utilisateurs. Ils fonctionnent dans un environnement privilégié et ne sont pas soumis au CSP.
Bien entendu, les intentions des scripts utilisateurs et des bookmarklets sont toutefois différentes: les scripts utilisateurs s'exécutent automatiquement lorsque les bookmarklets sont à la demande. Vous pouvez contourner cela, par exemple. en créant un <button> dans le script, en l'ajoutant à la page et en définissant un onclick écouteur d'événement sur ce bouton pour déclencher le code du bookmarklet.
Le code devrait ressembler à ceci:
// ==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);
Pris presque littéralement de mon script utilisateur qui vise également GitHub. Vous pouvez déboguer les scripts utilisateurs dans Firebug en utilisant debugger; mot-clé dans le script.
Notez cependant que Firebug lui-même est pour le moment également soumis au CSP, vous ne pouvez donc pas, par exemple, exécuter le code dans la console (mais vous pouvez inspecter vos scripts utilisateurs en mode "lecture seule"). Ceci est pris en charge dans ce bug .
le à la demande fonctionnalité est très important. J'ai des bookmarklets qui insèrent un eval-textarea rapide avec certaines fonctionnalités qui ne remplissent pas une grande partie de la page, une pour créer un code QR pour la page actuelle et d'autres plus petites. Ce ne sont pas spécifiques à GH. La puissance des bookmarklets réside dans le fait qu'ils peuvent être créés et supprimés très facilement. GreaseMonkey était déjà installé, mais cela ne résoudra pas le problème du CSP. Merci pour les suggestions, peut-être qu'une solution pour Firebug sera également bénéfique pour les bookmarklets.
Lekensteyn
4
Malheureusement, le correctif Firebug ne corrigera que Firebug lui-même. De Entrée de blog Github sur CSP : Comme précisé dans les spécifications CSP, les bookmarklets de navigateur ne doivent pas être affectés par CSP. (..) Mais, aucun des navigateurs n'obtient cela correctement. Tous provoquent des violations du CSP et empêchent le bookmarklet de fonctionner. Peut-être devriez-vous enquêter de manière plus approfondie sur le cas et signaler un problème concernant Bugzilla.
jakub.g
2
BTW vous pouvez utiliser GM_registerMenuCommand faire une invocation de fonction à la demande. N'oublie pas @grant GM_registerMenuCommand. Il ajoute une entrée au menu Greasemonkey, accessible sous (GM logo) > User Script Command.... De cette façon, vous pouvez facilement convertir vos bookmarklets en scripts utilisateur.
jakub.g
Je ne comprends pas ... créer un bouton sur la page pour charger le code lorsque l'utilisateur clique dessus ne fonctionne pas, il génère toujours une exception CSP
Michael
7
Github dit que cela devrait fonctionner conformément à la spécification, mais aucun navigateur ne l'a bien compris:
Pour mémoire, il existe un autre bogue Firefox spécifiquement pour les fonctionnalités de base du bookmarklet (il est moins probable que la discussion s'enlise): bugzilla.mozilla.org/show_bug.cgi?id=1478037
djpohly
Pour sauver le clic des autres, le bogue 1478037 mentionné par @djpohly dans le commentaire ci-dessus concerne l’autorisation des bookmarklets de s'exécuter tant qu'ils ne chargent pas de ressources externes.
waldyrious
1
Beaucoup de réponses recommandent des scripts utilisateur (comme TamperMonkey ou GreaseMonkey) mais je tiens à me rappeler que certaines pages sont sur la liste noire pour une raison donnée par ces extensions. (Bien sûr, vous pouvez remplacer la liste noire, mais les développeurs avaient une sécurité en tête et ont verrouillé ces pages).
Par exemple, je voulais utiliser un bookmarklet pour accéder rapidement à ReviewMeta à partir de n'importe quelle liste Amazon, mais Amazon a bloqué les sources de script non sécurisées (mise à jour: il n'a pas été bloqué, mais je n'avais aucun script, c'est dommage).
Les extensions de script utilisateur sont par défaut sur une liste noire sur les sites bancaires et les sites commerciaux afin d'empêcher l'installation / l'utilisation de scripts utilisateur malveillants.
(P.S. Ce n’est pas une réponse en soi, mais j’ai pensé qu’il serait utile de garder cela à l’esprit avant de mettre la main sur un script d’utilisateur pour trouver la page sur la liste noire et hésiter à la supprimer.)
J'ai créé un «correctif» de contournement de ce problème à l'aide d'un script utilisateur Greasemonkey (dans Firefox). Vous pouvez maintenant avoir des bookmarklets sur tous les sites CSP et https: //, en plus d'avoir vos bookmarklets dans un fichier de bibliothèque agréable, facilement éditable, au lieu d'être individuellement insérés dans un signet.
Si vous souhaitez exécuter vos bookmarklets sur des sites Web activés pour CSP dans Firefox, vous pouvez utiliser des feuilles de style CSS. répondre sur StackOverflow .
@grant GM_registerMenuCommand
. Il ajoute une entrée au menu Greasemonkey, accessible sous(GM logo) > User Script Command...
. De cette façon, vous pouvez facilement convertir vos bookmarklets en scripts utilisateur.Github dit que cela devrait fonctionner conformément à la spécification, mais aucun navigateur ne l'a bien compris:
https://github.com/blog/1477-content-security-policy#bookmarklets
Vous devriez ouvrir un bug pour votre navigateur préféré pour ce problème ou voter pour:
la source
Beaucoup de réponses recommandent des scripts utilisateur (comme TamperMonkey ou GreaseMonkey) mais je tiens à me rappeler que certaines pages sont sur la liste noire pour une raison donnée par ces extensions. (Bien sûr, vous pouvez remplacer la liste noire, mais les développeurs avaient une sécurité en tête et ont verrouillé ces pages).
Par exemple, je voulais utiliser un bookmarklet pour accéder rapidement à ReviewMeta à partir de n'importe quelle liste Amazon, mais Amazon a bloqué les sources de script non sécurisées (mise à jour: il n'a pas été bloqué, mais je n'avais aucun script, c'est dommage). Les extensions de script utilisateur sont par défaut sur une liste noire sur les sites bancaires et les sites commerciaux afin d'empêcher l'installation / l'utilisation de scripts utilisateur malveillants.
(P.S. Ce n’est pas une réponse en soi, mais j’ai pensé qu’il serait utile de garder cela à l’esprit avant de mettre la main sur un script d’utilisateur pour trouver la page sur la liste noire et hésiter à la supprimer.)
la source
J'ai créé un «correctif» de contournement de ce problème à l'aide d'un script utilisateur Greasemonkey (dans Firefox). Vous pouvez maintenant avoir des bookmarklets sur tous les sites CSP et https: //, en plus d'avoir vos bookmarklets dans un fichier de bibliothèque agréable, facilement éditable, au lieu d'être individuellement insérés dans un signet.
Voir: https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J
la source
Si vous souhaitez exécuter vos bookmarklets sur des sites Web activés pour CSP dans Firefox, vous pouvez utiliser des feuilles de style CSS. répondre sur StackOverflow .
la source