Как отключить CSP в Firefox только для букмарклетов?
26
Сегодня я заметил, что не могу запускать букмарклеты на https://github.com/ из-за ограничений Content Security Policy (CSP). Есть ли способ отключить CSP в Firefox только для букмарклетов, а не для всего остального?
Я заметил security.csp.enableпараметр в about:config, но это полностью отключило бы CSP. Следующее сообщение регистрируется в консоли при активации букмарклета:
Вы можете попытаться преобразовать букмарклеты в 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, поэтому вы не можете, например, выполнить код в консоли (но вы можете проверять свои пользовательские скрипты в режиме «только для чтения»). Об этом позаботятся в этой ошибке .
Функция по запросу очень важна. У меня есть букмарклеты, которые вставляют быстрое eval-textarea с некоторыми функциями, которые не занимают большую часть страницы, одна для создания QR-кода для текущей страницы и некоторые другие меньшие части. Они не являются специфичными для GH. Сила букмарклетов в том, что их можно создавать и удалять очень легко. GreaseMonkey уже был установлен, но это не решит проблему CSP. Спасибо за предложения, возможно, решение для Firebug также будет полезным для букмарклетов.
Лекенштейн
4
К сожалению, исправление Firebug исправит только сам Firebug. Из записи блога Github на CSP : Как ясно из спецификации CSP, CSP не должен влиять на закладки браузера. (..) Но ни один из браузеров не понял это правильно. Все они вызывают нарушения CSP и препятствуют функционированию букмарклета. Возможно, вам следует расследовать дело более тщательно и сообщить о проблеме на Bugzilla.
jakub.g
2
Кстати, вы можете использовать GM_registerMenuCommand для вызова функции по требованию. Не стоит забывать @grant GM_registerMenuCommand. Он добавляет запись в меню Greasemonkey, доступный в (GM logo) > User Script Command.... Таким образом, вы можете легко конвертировать ваши закладки в пользовательские скрипты.
jakub.g
Я не понимаю ... создание кнопки на странице для загрузки кода при нажатии не работает, все равно выдает исключение CSP
Майкл
7
Github говорит, что он должен работать в соответствии со спецификацией, но ни один браузер не делает это правильно:
Напомним, что есть еще одна ошибка в Firefox, предназначенная специально для базовых функций букмарклетов (менее вероятно, что они увязнут в обсуждении): bugzilla.mozilla.org/show_bug.cgi?id=1478037
djpohly
Чтобы сохранить другим щелчок, ошибка 1478037, упомянутая @djpohly в приведенном выше комментарии, позволяет запускать букмарклеты до тех пор, пока они не загружают внешние ресурсы.
Вальдиро
1
Многие ответы рекомендуют пользовательские скрипты (такие как TamperMonkey или GreaseMonkey), но я хочу помнить, что некоторые страницы занесены в черный список по причине этих расширений. (Конечно, вы можете переопределить черный список, но разработчики имели в виду безопасность и заблокировали эти страницы).
Например, я хотел использовать букмарклет, чтобы быстро перейти к ReviewMeta из любого списка Amazon, но Amazon заблокировал незащищенные источники сценариев (обновление: оно не было заблокировано, но у меня не было сценария, это позор). Расширения пользовательских сценариев помещаются в черный список на банковских и торговых площадках по умолчанию, чтобы предотвратить установку / использование вредоносных пользовательских сценариев.
(PS Это не ответ сам по себе, но я подумал, что было бы полезно иметь это в виду, прежде чем взять в руки пользовательский скрипт, просто чтобы найти страницу в черном списке и не решаясь ее исключить.)
Я создал обходное решение для этой проблемы, используя скрипт пользователя Greasemonkey (в Firefox). Теперь вы можете иметь закладки на всех сайтах CSP и https: //, а также иметь закладки в приятном, легко редактируемом файле библиотеки, вместо того чтобы по отдельности помещаться в закладки.
Если вы хотите запускать свои букмарклеты на веб-сайтах с поддержкой CSP в Firefox, вы можете использовать таблицы стилей CSS, см. Мой ответ на StackOverflow .
@grant GM_registerMenuCommand
. Он добавляет запись в меню Greasemonkey, доступный в(GM logo) > User Script Command...
. Таким образом, вы можете легко конвертировать ваши закладки в пользовательские скрипты.Github говорит, что он должен работать в соответствии со спецификацией, но ни один браузер не делает это правильно:
https://github.com/blog/1477-content-security-policy#bookmarklets
Вы должны открыть баг для вашего любимого браузера по этой проблеме или проголосовать за него:
источник
Многие ответы рекомендуют пользовательские скрипты (такие как TamperMonkey или GreaseMonkey), но я хочу помнить, что некоторые страницы занесены в черный список по причине этих расширений. (Конечно, вы можете переопределить черный список, но разработчики имели в виду безопасность и заблокировали эти страницы).
Например, я хотел использовать букмарклет, чтобы быстро перейти к ReviewMeta из любого списка Amazon, но Amazon заблокировал незащищенные источники сценариев (обновление: оно не было заблокировано, но у меня не было сценария, это позор). Расширения пользовательских сценариев помещаются в черный список на банковских и торговых площадках по умолчанию, чтобы предотвратить установку / использование вредоносных пользовательских сценариев.
(PS Это не ответ сам по себе, но я подумал, что было бы полезно иметь это в виду, прежде чем взять в руки пользовательский скрипт, просто чтобы найти страницу в черном списке и не решаясь ее исключить.)
источник
Я создал обходное решение для этой проблемы, используя скрипт пользователя Greasemonkey (в Firefox). Теперь вы можете иметь закладки на всех сайтах CSP и https: //, а также иметь закладки в приятном, легко редактируемом файле библиотеки, вместо того чтобы по отдельности помещаться в закладки.
См. Https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J.
источник
Если вы хотите запускать свои букмарклеты на веб-сайтах с поддержкой CSP в Firefox, вы можете использовать таблицы стилей CSS, см. Мой ответ на StackOverflow .
источник