Spec-Zone.ru › Web Extensions

content_security_policy

Тип String
Обязательно Нет
Версия манифеста 2 или выше
Пример Манифест V2:
"content_security_policy": "default-src 'self'"
Манифест V3:
"content_security_policy": {
  "extension_pages": "default-src 'self'"
}

Расширениям по умолчанию применяется политика безопасности содержимого (CSP). Политика по умолчанию ограничивает источники, из которых расширения могут загружать код (например, <script> ресурсы) и запрещает потенциально небезопасные практики, такие как использование eval(). Подробнее об этом см. Политику безопасности содержимого по умолчанию.

Вы можете использовать ключ манифеста "content_security_policy" для ослабления или ужесточения политики по умолчанию. Этот ключ задаётся так же, как заголовок Content-Security-Policy HTTP. Подробное описание синтаксиса CSP см. в Документации по использованию политики безопасности содержимого.

Например, вы можете использовать этот ключ для:

  • Ограничения разрешённых источников для других типов контента, таких как изображения и таблицы стилей, используя соответствующую директиву политики.
  • Разрешения расширению воспользоваться WebAssembly, включив источник 'wasm-unsafe-eval' в директиву script-src.
  • Ослабления политики по умолчанию script-src (только для манифеста V2):
    • Разрешения расширению загружать скрипты извне своего пакета, указав их URL в директиве script-src.
    • Разрешения расширению выполнять встроенные скрипты, указав хеш скрипта в директиве script-src.
    • Разрешения расширению использовать eval() и аналогичные функции, включив 'unsafe-eval' в директиву script-src.

На политику, которую вы можете указать с помощью этого ключа, накладываются ограничения:

  • Директива script-src должна включать по крайней мере ключевое слово 'self' и может содержать только безопасные источники. Набор разрешенных безопасных источников отличается между манифестом V2 и манифестом V3.
  • Политика может включать только default-src (без script-src), если её источники соответствуют требованиям директивы script-src.
  • Ключевое слово object-src может потребоваться, см. директиву object-src для получения подробностей.
  • Директивы, которые ссылаются на код – script-src, script-src-elem, worker-src и default-src (если используется как резервный вариант) – имеют те же требования к безопасным источникам. Нет ограничений на директивы CSP, которые охватывают контент, не являющийся скриптами, такой как img-src.

В манифесте V3 все источники CSP, которые ссылаются на внешний или нестатический контент, запрещены. Разрешены только значения 'none', 'self', и 'wasm-unsafe-eval'. В манифесте V2 источник для директивы скрипта считается безопасным, если он соответствует этим критериям:

  • Дикие символы в именах хостов не допускаются, например "script-src 'self' *".
  • Удаленные источники должны использовать схемы https:.
  • Удаленные источники не должны использовать подстановку символов для доменов в списке общедоступных расширений (например, "*.co.uk" и "*.blogspot.com" не допускаются, хотя "*.foo.blogspot.com" разрешены).
  • Все источники должны указывать хост.
  • Допускаются только указанные схемы для источников: blob:, filesystem:, moz-extension:, https:, и wss:.
  • Разрешены только перечисленные ключевые слова: 'none', 'self', 'unsafe-eval', и 'wasm-unsafe-eval'.

Директива object-src

Директива object-src может потребоваться в некоторых браузерах, поддерживающих устаревшие плагины, и должна быть установлена на безопасный источник, такой как 'none' при необходимости. Это может быть необходимо для браузеров до 2022 года.

  • В Firefox, "object-src" необязателен начиная с Firefox 106. В более ранних версиях, если "object-src" не указан, "content_security_policy" игнорируется, и используется политика CSP по умолчанию.
  • В Chrome, "object-src" требуется. Если он отсутствует или считается небезопасным, используется значение по умолчанию ("object-src 'self'") и отображается сообщение об ошибке.
  • В Safari, "object-src" не требуется.

См. группу сообщества W3C WebExtensions вопрос 204, Удалить object-src из CSP, для получения дополнительной информации.

Синтаксис манифеста V2

В манифесте V2 одна политика безопасности содержимого задаётся для ключа следующим образом:

"content_security_policy": "default-src 'self'"

Синтаксис манифеста V3

В манифесте V3 ключ content_security_policy — это объект, который может содержать любые из этих свойств, все необязательные:

Имя Тип Описание
extension_pages String Политика безопасности содержимого, используемая для страниц расширения. Директивы script-src и worker-src могут иметь только эти значения:
  • 'self'
  • 'none'
  • 'wasm-unsafe-eval'
sandbox String Политика безопасности содержимого, используемая для страниц расширения в песочнице.

Примеры

END_OF_DOCUMENT_MARKER

Примеры допустимого использования

Примечание: Примеры демонстрируют правильное использование ключей в CSP. Однако расширения с 'unsafe-eval', удалёнными скриптами, blob или удалёнными источниками в их CSP не разрешены для расширений Firefox в соответствии с политикой расширений из-за серьёзных проблем с безопасностью.

Примечание: Некоторые примеры включают директиву object-src, обеспечивающую обратную совместимость со старыми версиями браузеров. Смотрите директиву object-src для получения более подробной информации.

Требуется, чтобы все типы контента были упакованы с расширением:

  • Manifest V2
    "content_security_policy": "default-src 'self'"
    
  • Manifest V3
    "content_security_policy": {
      "extension_pages": "default-src 'self'"
    }
    

Разрешить удалённые скрипты с "https://example.com":

  • Manifest V2
    "content_security_policy": "script-src 'self' https://example.com; object-src 'self'"
    
  • Manifest V3 не разрешает удалённые URL в script-src части extension_pages.

Разрешить удалённые скрипты с любого поддомена "jquery.com":

  • Manifest V2
    "content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'"
    
  • Manifest V3 не разрешает удалённые URL в script-src части extension_pages.

Разрешить eval() и аналогичные:

  • Manifest V2
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
    
  • Manifest V3 не разрешает 'unsafe-eval' в script-src.

Разрешить встроенный скрипт: "<script>alert('Hello, world.');</script>":

  • Manifest V2
    "content_security_policy": "script-src 'self' 'sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng='; object-src 'self'"
    
  • Manifest V3 не разрешает хэши CSP в script-src части extension_pages.

Сохранить остальную часть политики, но также потребовать, чтобы изображения должны быть упакованы с расширением:

  • Manifest V2
    "content_security_policy": "script-src 'self'; object-src 'self'; img-src 'self'"
    
  • Manifest V3
    "content_security_policy": {
      "extension_pages": "script-src 'self'; img-src 'self'"
    }
    

Включить использование WebAssembly:

  • Manifest V2 Для обратной совместимости, расширения Manifest V2 в Firefox могут использовать WebAssembly без использования 'wasm-unsafe-eval'. Однако это поведение не гарантируется. См. ошибку Firefox 1770909. Расширения, использующие WebAssembly, поэтому рекомендуется объявлять 'wasm-unsafe-eval' в их CSP. См. WebAssembly на странице политики безопасности контента для получения дополнительной информации.
    "content_security_policy": "script-src 'self' 'wasm-unsafe-eval'"
    
  • Manifest V3
    "content_security_policy": {
      "extension_pages": "script-src 'self' 'wasm-unsafe-eval'"
    }
    

Примеры недопустимого использования

Политика, которая опускает директиву "object-src":

"content_security_policy": "script-src 'self' https://*.jquery.com;"

Однако это недопустимо только в браузерах, которые поддерживают устаревшие плагины. Смотрите директиву object-src для получения более подробной информации.

Политика, которая опускает ключевое слово "self" в директиве "script-src":

"content_security_policy": "script-src https://*.jquery.com; object-src 'self'"

Схема для удалённого источника не https:

"content_security_policy": "script-src 'self' http://code.jquery.com; object-src 'self'"

Подстановка используется с общим доменным именем:

"content_security_policy": "script-src 'self' https://*.blogspot.com; object-src 'self'"

Источник указывает схему, но не хост:

"content_security_policy": "script-src 'self' https:; object-src 'self'"

Директива включает недопустимое ключевое слово 'unsafe-inline':

"content_security_policy": "script-src 'self' 'unsafe-inline'; object-src 'self'"

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet
content_security_policy
ДаДо Chrome 110, директива object-src была обязательной с безопасным источником. С Chrome 111, директива object-src является необязательной.
ДаДо Edge 110, директива object-src была обязательной с безопасным источником. С Edge 111, директива object-src является необязательной.
48["Firefox не поддерживает 'http://127.0.0.1' или 'http://localhost' в качестве источников скриптов: они должны быть предоставлены по протоколу HTTPS.", "До Firefox 105, директива object-src была обязательной с безопасным источником. С Firefox 106, директива object-src является необязательной."]
?
ДаДо Opera 96, директива object-src была обязательной с безопасным источником. С Opera 97, директива object-src является необязательной.
14Нет требования включать директиву object-src.
? ? Нет ?
15Нет требования включать директиву object-src.
?
extension_pages
88["Доступно для использования в Manifest V3 или более поздних версиях.", "До Chrome 110, директива object-src была обязательной с безопасным источником. С Chrome 111, директива object-src является необязательной."]
88["Доступно для использования в Manifest V3 или более поздних версиях.", "До Edge 110, директива object-src была обязательной с безопасным источником. С Edge 111, директива object-src является необязательной."]
72До Firefox 105, директива object-src была обязательной с безопасным источником. С Firefox 106, директива object-src является необязательной.
?
74["Доступно для использования в Manifest V3 или более поздних версиях.", "До Opera 96, директива object-src была обязательной с безопасным источником. С Opera 97, директива object-src является необязательной."]
15.4["Доступно для использования в Manifest V3 или более поздних версиях.", "Нет требования включать директиву object-src."]
? ? Нет ?
15.4["Доступно для использования в Manifest V3 или более поздних версиях.", "Нет требования включать директиву object-src."]
?
isolated_world 88 88 Нет ? 74 Нет ? ? Нет ? Нет ?
sandbox 88 88 Нет ? 74 Нет ? ? Нет ? Нет ?

© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_security_policy

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API