Используется ли Mozilla блок CSP для выполнения Javascript из закладки по умолчанию?
Можно ли настроить это?
Используется ли Mozilla блок CSP для выполнения Javascript из закладки по умолчанию?
Можно ли настроить это?
По состоянию на 2017 год ответ по-прежнему является окончательным "возможно" - точно так же, как когда этот ответ был первоначально опубликован в 2011 году. спецификация ясно говорит:
Политика, применяемая к ресурсу, НЕ ДОЛЖНА вмешиваться в работу функций пользовательского агента, таких как аддоны, расширения или букмарклеты.
И это действительно то поведение, которое я вижу в Chrome 61: букмарклет будет работать на https://addons.mozilla.org/, сайте, который имеет строгую безопасности контента без script-src: 'unsafe-inline'
. Тем не менее, в Firefox 56 букмарклеты не будут запускаться на этом веб-сайте и сообщается о нарушении CSP.
Существует очень длинная дискуссия по этому вопросу в отчет об ошибке Firefox, в частности, ссылка на аналогичное обсуждение спецификации W3C. Таким образом, на данный момент вы не можете полагаться на независящие от CSP букмарклеты. Вы всегда можете отключить CSP в целом, но для этого один важный уровень защиты меньше.
Поведение задается в вики mozillas.
CSP не должен вмешиваться в работу пользовательских сценариев (таких как надстройки браузера и букмарклеты).
Посмотрите здесь: https://wiki.mozilla.org/Security/CSP/Specification#Non-Normative_Client-Side_Considerations
Да, CSP блокирует закладки в Mozilla Firefox. Существует ошибка об ошибке.
Тем не менее, вы можете обойти это ограничение, введя код JS во внешнюю таблицу стилей CSS, например, Верхний лист новостей новостей:
Внешний CSS:
#topnewsfeed { font-family: '(function(){/*payload*/})()'; }
Закладка 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);
})()
Закладок загружает файл CSS, содержащий JS-код, добавляет элемент, созданный этим CSS, читает атрибут стиля элемента и eval
код.
Я создал обходное исправление для этой проблемы, используя регистрационный файл Greasemonkey (в Firefox). Теперь вы можете иметь букмарклеты на всех сайтах CSP и https://, а также иметь ваши закладки в хорошем, легко редактируемом библиотечном файле вместо того, чтобы быть индивидуально зажатым в закладки.
Смотрите: https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J
Как заблокировать запуск букмарклетов на моей веб-странице?