Блокирует ли Mozillas CSP выполнение Javascript из закладки по умолчанию?
Можно ли настроить так?
Блокирует ли Mozillas CSP выполнение Javascript из закладки по умолчанию?
Можно ли настроить так?
По состоянию на 2017 год ответ по-прежнему остается окончательным «может быть» — точно так же, как когда этот ответ был первоначально опубликован в 2011 году. "nofollow noreferrer">спецификация ясно говорит:
Политика, применяемая к ресурсу, НЕ ДОЛЖНА мешать работе функций пользовательского агента, таких как надстройки, расширения или букмарклеты.
И это действительно то поведение, которое я вижу в 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, например, в мой букмарклет Top News Feed. делает:
Внешний 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
unsafe-inline
) 17.01.2017