23

Сегодня я заметил, что не могу запускать букмарклеты на https://github.com/ из-за ограничений Content Security Policy (CSP). Есть ли способ отключить CSP в Firefox только для букмарклетов, а не для всего остального?

Я заметил параметр security.csp.enable в about:config , но это полностью отключило бы CSP. Следующее сообщение регистрируется в консоли при активации букмарклета:

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

5 ответов5

7

Github говорит, что он должен работать в соответствии со спецификацией, но ни один браузер не делает это правильно:

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

Вы должны открыть баг для вашего любимого браузера по этой проблеме или проголосовать за него:

7

Вы можете попытаться преобразовать букмарклеты в Greasemonkey userscripts. Они работают в привилегированной среде и не подлежат CSP.

Однако, конечно, намерения пользовательских скриптов и букмарклетов различны - пользовательские скрипты запускаются автоматически, а букмарклеты по запросу. Вы можете обойти это, например, создав <button> в пользовательском сценарии, добавив его на страницу и установив прослушиватель события onclick для этой кнопки, чтобы запустить код букмарклета.

Код должен идти так:

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

Взято почти буквально из моего пользовательского скрипта, который также нацелен на GitHub. Вы можете отлаживать пользовательские скрипты в Firebug, используя debugger; Ключевое слово в сценарии.

Однако обратите внимание, что сам Firebug на данный момент также подчиняется CSP, поэтому вы не можете, например, выполнить код в консоли (но вы можете проверять свои пользовательские скрипты в режиме «только для чтения»). Об этом позаботятся в этой ошибке.

1

Многие ответы рекомендуют пользовательские скрипты (такие как TamperMonkey или GreaseMonkey), но я хочу помнить, что некоторые страницы занесены в черный список по причине этих расширений. (Конечно, вы можете переопределить черный список, но разработчики имели в виду безопасность и заблокировали эти страницы).

Например, я хотел использовать букмарклет, чтобы быстро перейти к ReviewMeta из любого списка Amazon, но Amazon заблокировал незащищенные источники сценариев (обновление: оно не было заблокировано, но у меня не было сценария, это позор). Расширения пользовательских сценариев помещаются в черный список на банковских и торговых площадках по умолчанию, чтобы предотвратить установку / использование вредоносных пользовательских сценариев.

(PS Это не ответ сам по себе, но я подумал, что было бы полезно иметь это в виду, прежде чем взять в руки пользовательский сценарий, просто чтобы найти страницу в черном списке и не решаясь ее исключить.)

0

Я создал обходное решение для этой проблемы, используя скрипт пользователя Greasemonkey (в Firefox). Теперь вы можете иметь закладки на всех сайтах CSP и https://, а также иметь закладки в приятном, легко редактируемом библиотечном файле, вместо того, чтобы по отдельности помещаться в закладки.

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

-1

Если вы хотите запускать свои букмарклеты на сайтах с поддержкой CSP в Firefox, вы можете использовать таблицы стилей CSS, см. Мой ответ на StackOverflow.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .