Хобрук: Ваш путь к мастерству в программировании

Блокирует ли Content Security Policy букмарклеты?

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

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


  • Просто любопытство, почему вы хотите отключить букмарклеты? 30.09.2011
  • Я не просто беспокоюсь, что кто-то другой может сделать это, потому что они не хотят, чтобы Javascript вводился на эту веб-страницу. 30.09.2011
  • Всегда есть такие вещи, как жиромонки. Если пользователь решит, что он хочет внедрить javascript на веб-сайт, который повлияет только на него самого, никто не вправе помешать ему это сделать. 30.09.2011
  • У Greasemonkey будет та же проблема. Возможно, они смогут переписать заголовок http или изменить настройки браузера. 30.09.2011
  • Я уверен, что GM не будет. Это расширение для браузера, поэтому оно, как правило, невосприимчиво к ограничениям безопасности, а скрипты не выполняются напрямую в контексте сайта. 30.09.2011

Ответы:


1

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

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

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

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

30.09.2011
  • Спасибо за тестирование! НО вы можете просто переключить CSP, если хотите. Откройте about:config и установите для security.csp.enable значение false. Таким образом, вы все равно сможете запускать собственные буклеты. 30.09.2011
  • @PiTheNumber: Мой ответ уже говорит, что вы можете отключить CSP, и советует этого не делать. 30.09.2011
  • Извините, я не видел, как вы редактировали, когда писал комментарий. 30.09.2011

  • 2

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

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

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

    03.12.2012

    3

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

    09.08.2014

    4

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

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

    09.05.2015
  • Этот метод не работает, потому что букмарклет не может быть выполнен (bookmarklet = unsafe-inline) 17.01.2017
  • Новые материалы

    #093 | Моделирование вспышки эпидемии с помощью JavaScript — Часть 3
    TLDR: Я сделал симуляцию вспышки эпидемии, в которую можно поиграть здесь . Мой холст, моя сцена Мой HTML — это всего лишь один div с классом stage, и вот как я настроил на нем свой объект..

    numberToString.js (8kyu 16)
    Алгоритм кодовых войн Проблема Нам нужна функция, которая может преобразовать число в строку. 숫자를 문자열로 변환하는 함수를 작성해라. Решение 01 function numberToString(n) { return n.toString(); }..

    Лучшие практики для быстрого изучения языка программирования
    Изучение языка программирования может быть сложной задачей, но при правильном подходе определенно возможно быстро выучить язык программирования. Хорошее понимание языка программирования может..

    Использование данных из Adobe Analytics в предложениях Adobe Target
    Я уверен, что все видели эти всплывающие окна в интернет-магазинах, которые говорят что-то вроде « 15 человек просматривают этот товар прямо сейчас! » или « 105 человек из Мичигана купили это..

    Машинное обучение и его набор данных в CreateML
    Когда я впервые начал учиться в Apple Developer Academy, у меня был момент неуверенности в моем интересе к машинному обучению. Нужно ли мне сменить карьеру моей мечты с специалиста по данным на..

    Обучение требует воли
    Недавно я прочитал отличную статью Шейна Легга и Джоэла Венесса из DeepMind. http://arxiv.org/pdf/1109.5951v2.pdf В статье «универсальный интеллект» агента π определяется как: Поэтому..

    Безопасность по дизайну делает всех счастливыми
    Заложенная безопасность делает всех счастливыми Если вы никогда не смотрели Louis C.K. рассказать о том, как Все удивительно, и никто не счастлив ; побаловать себя. Сделайте это прямо..