Блокирует ли Политика безопасности контента закладки? - PullRequest
18 голосов
/ 30 сентября 2011

Блокирует ли Mozillas CSP выполнение Javascript из закладки по умолчанию?

Может ли он быть настроен для этого?

Ответы [ 4 ]

18 голосов
/ 30 сентября 2011

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

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

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

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

5 голосов
/ 04 декабря 2012

Поведение указано в вики mozillas.

CSP не должен мешать работе пользовательских сценариев (таких как надстройки браузера и закладки).

Посмотрите здесь: https://wiki.mozilla.org/Security/CSP/Specification#Non-Normative_Client-Side_Considerations

3 голосов
/ 10 августа 2014

Да, CSP блокирует букмарклеты в Mozilla Firefox. В этом есть ошибка .

Однако вы можете обойти это ограничение, внедрив код JS во внешнюю таблицу стилей CSS, как мой букмарклет Top News Feed :

Внешний CSS:

#topnewsfeed { font-family: '(function(){/*payload*/})()'; }

Bookmarklet 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 код.

0 голосов
/ 09 мая 2015

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

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

...