Подтвердить что ты не робот

Предоставляет ли политика безопасности контента блокировку букмарклетов?

Используется ли Mozilla блок CSP для выполнения Javascript из закладки по умолчанию?

Можно ли настроить это?

4b9b3361

Ответ 1

По состоянию на 2017 год ответ по-прежнему является окончательным "возможно" - точно так же, как когда этот ответ был первоначально опубликован в 2011 году. спецификация ясно говорит:

Политика, применяемая к ресурсу, НЕ ДОЛЖНА вмешиваться в работу функций пользовательского агента, таких как аддоны, расширения или букмарклеты.

И это действительно то поведение, которое я вижу в Chrome 61: букмарклет будет работать на https://addons.mozilla.org/, сайте, который имеет строгую безопасности контента без script-src: 'unsafe-inline'. Тем не менее, в Firefox 56 букмарклеты не будут запускаться на этом веб-сайте и сообщается о нарушении CSP.

Существует очень длинная дискуссия по этому вопросу в отчет об ошибке Firefox, в частности, ссылка на аналогичное обсуждение спецификации W3C. Таким образом, на данный момент вы не можете полагаться на независящие от CSP букмарклеты. Вы всегда можете отключить CSP в целом, но для этого один важный уровень защиты меньше.

Ответ 3

Да, 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 код.

Ответ 4

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

Смотрите: https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J

Ответ 5

Как заблокировать запуск букмарклетов на моей веб-странице?