content_security_policy
| Тип | String |
|---|---|
| Обязательно | Нет |
| Версия манифеста | 2 или выше |
| Пример | Манифест V2: "content_security_policy": "default-src 'self'" "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.
- Разрешения расширению загружать скрипты извне своего пакета, указав их URL в директиве
На политику, которую вы можете указать с помощью этого ключа, накладываются ограничения:
- Директива
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 могут иметь только эти значения:
|
sandbox | String | Политика безопасности содержимого, используемая для страниц расширения в песочнице. |
Примеры
Примеры допустимого использования
Примечание: Примеры демонстрируют правильное использование ключей в 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