Como desativar o CSP no Firefox apenas por bookmarklets?

20

Hoje, percebi que não é possível executar bookmarklets no link devido às restrições da Política de segurança de conteúdo (CSP). Existe uma maneira de desabilitar o CSP no Firefox apenas por bookmarklets, e não todo o resto?

Percebi a opção security.csp.enable em about:config , mas isso desativaria o CSP completamente. A seguinte mensagem é registrada no console ao ativar um 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:...
    
por Lekensteyn 22.04.2013 / 14:41

5 respostas

6

Você pode tentar converter seus bookmarklets em GreaseMonkey . Eles correm em um ambiente privilegiado e não estão sujeitos ao CSP.

No entanto, é claro que as intenções de userscripts e bookmarklets são diferentes - os scripts de usuários são executados automaticamente enquanto os bookmarklets são solicitados. Você pode contornar isto, por exemplo criando um <button> no userscript, anexando-o à página e definindo um onclick event listener nesse botão para disparar o código do bookmarklet.

O código deve ser assim:

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

Extraído quase literalmente do meu userscript que também está segmentando o GitHub. Você pode depurar scripts de usuários no Firebug usando debugger; keyword no script.

No entanto, o próprio Firebug está sujeito a CSP, por isso você não pode, por exemplo, execute código no console (mas você pode inspecionar seus scripts de usuário no modo "somente leitura"). Isso está sendo resolvido em este bug .

    
por 25.04.2013 / 21:48
6

O Github diz que deve funcionar de acordo com as especificações, mas nenhum navegador acerta:

link

Você deve abrir um bug do seu navegador favorito para esse problema ou votar nele:

  • Firefox: link
  • Chromium: link
por 13.07.2015 / 10:03
1

Muitas respostas recomendam scripts de usuário (como o TamperMonkey ou o GreaseMonkey), mas quero lembrar que algumas páginas estão na lista negra por um motivo dessas extensões. (Claro, você pode sobrescrever a lista negra, mas os desenvolvedores tinham segurança em mente e trancaram essas páginas).

Por exemplo, eu queria usar um bookmarklet para ir rapidamente para o ReviewMeta a partir de qualquer listagem do Amazon, mas a Amazon bloqueou fontes de script inseguras (atualização: ele não foi bloqueado, mas eu não tinha script, é uma pena). As extensões de script de usuário estão na lista negra de sites bancários e de compras, por padrão, para impedir que scripts de usuários mal-intencionados sejam instalados / usados.

(P.S. Esta não é uma resposta em si, mas eu pensei que seria útil manter isso em mente antes de colocar as mãos em um userscript apenas para encontrar a página na lista negra e hesitar em não colocar a blacklist nela).

    
por 11.07.2018 / 09:07
0

Eu criei uma "solução" para esse problema usando um userscript do Greasemonkey (no Firefox). Agora você pode ter bookmarklets em todos os sites CSP e https: //, além de ter seus bookmarklets em um arquivo de biblioteca agradável e de fácil edição, em vez de ser espremido individualmente em um marcador.

Veja: link

    
por 09.05.2015 / 06:40
-1

Se você deseja executar seus bookmarklets em sites habilitados para CSP no Firefox, é possível usar folhas de estilo CSS, ver minha resposta no StackOverflow .

    
por 10.08.2014 / 02:57