Политика безопасности контента
Политика безопасности контента
Заголовок ответа HTTP Content-Security-Policy позволяет администраторам веб-сайта контролировать ресурсы, которые пользовательский агент может загрузить для данной страницы. За исключением нескольких случаев, политики в основном включают указание источников сервера и точек входа для скриптов. Это помогает защититься от межсайтовых сценариев (межсайтовый скриптинг).
Дополнительную информацию см. в статье об Политике безопасности контента (CSP).
| Тип заголовка | Заголовок ответа |
|---|---|
| Запрещенное имя заголовка | нет |
Синтаксис
Content-Security-Policy: <policy-directive>; <policy-directive>
где <policy-directive> состоит из: <directive> <value> без знаков препинания внутри.
Директивы
Директивы загрузки
Директивы загрузки управляют расположениями, из которых могут загружаться определенные типы ресурсов.
child-src-
Определяет допустимые источники для потоков обработки данных и вложенных контекстов просмотра, загружаемых с помощью элементов, таких как
<frame>и<iframe>.Предупреждение: Вместо
child-src, если вы хотите регулировать вложенные контексты просмотра и потоки обработки данных, необходимо использовать директивыframe-srcиworker-srcсоответственно. connect-src-
Ограничивает URL-адреса, которые могут загружаться с помощью интерфейсов сценариев
default-src-
Служит в качестве резервного варианта для других директив загрузки.
font-src-
Указывает допустимые источники шрифтов, загружаемых с помощью
@font-face. frame-src-
Указывает допустимые источники для вложенных контекстов просмотра, загружаемых с помощью таких элементов, как
<frame>и<iframe>. img-src-
Указывает допустимые источники изображений и значков избранных.
manifest-src-
Указывает допустимые источники файлов манифеста приложения.
media-src-
Указывает допустимые источники для загрузки медиа с помощью элементов
<audio>,<video>и<track>. object-src-
Указывает допустимые источники для элементов
<object>,<embed>и<applet>.Примечание: Элементы, контролируемые
object-src, возможно, случайно считаются устаревшими HTML-элементами и не получают новых стандартизированных функций (таких как атрибуты безопасностиsandboxилиallowдля<iframe>). Поэтому рекомендуется ограничить эту директиву загрузки (например, явно задатьobject-src 'none'по возможности). -
prefetch-srcЭкспериментально -
Указывает допустимые источники для предварительной загрузки или предварительного рендеринга.
script-src-
Указывает допустимые источники ресурсов JavaScript и WebAssembly.
script-src-elem-
Указывает допустимые источники элементов JavaScript
<script>. script-src-attr-
Указывает допустимые источники встроенных обработчиков событий JavaScript.
style-src-
Указывает допустимые источники таблиц стилей.
style-src-elem-
Указывает допустимые источники для элементов таблиц стилей
<style>и элементов<link>сrel="stylesheet". style-src-attr-
Указывает допустимые источники встроенных стилей, применяемых к отдельным элементам DOM.
worker-src-
Указывает допустимые источники для скриптов
Worker,SharedWorkerилиServiceWorker.
Директивы документа
Директивы документа управляют свойствами документа или среды потока обработки данных, к которому применяется политика.
Директивы навигации
Директивы навигации управляют тем, в какие места пользователь может перейти или отправить форму, например.
form-action-
Ограничивает URL-адреса, которые могут использоваться в качестве цели отправки формы из данного контекста.
frame-ancestors-
Указывает допустимые родительские элементы, которые могут встраивать страницу с помощью
<frame>,<iframe>,<object>,<embed>или<applet>. -
Ограничивает URL-адреса, к которым документ может инициировать навигацию любыми средствами, включая
<form>(еслиform-actionне указан),<a>,window.location,window.openи т. д.
Директивы отчётности
Директивы отчётности контролируют процесс отчётности о нарушениях CSP. Смотрите также заголовок Content-Security-Policy-Report-Only.
-
report-uriУстаревшее -
Инструктирует пользовательский агент сообщать о попытках нарушения Content Security Policy. Эти отчёты о нарушениях представляют собой JSON-документы, отправленные по HTTP
POSTзапросу на указанный URI.Предупреждение: Хотя директива
report-toпредназначена для замены устаревшей директивыreport-uri, директиваreport-toпока не поддерживается во многих браузерах. Таким образом, для совместимости с текущими браузерами и одновременного добавления совместимости с будущими браузерами, поддерживающимиreport-to, можно указать обе директивыreport-uriиreport-to:Content-Security-Policy: …; report-uri https://endpoint.example.com; report-to groupnameВ браузерах, поддерживающих
report-to, директиваreport-uriбудет проигнорирована. report-to-
Вызывает
SecurityPolicyViolationEvent.
Другие директивы
-
require-sri-forУстаревшее Нестандартное -
Требует использование SRI для скриптов или стилей на странице.
-
require-trusted-types-forЭкспериментальное -
Применяет Trusted Types в точках ввода DOM XSS.
-
trusted-typesЭкспериментальное -
Используется для указания списка разрешенных политик Trusted Types. Trusted Types позволяет приложениям заблокировать точки ввода DOM XSS, чтобы принимать только неподделываемые, типизированные значения вместо строк.
upgrade-insecure-requests-
Инструктирует пользовательские агенты рассматривать все небезопасные URL-адреса сайта (те, которые предоставляются по протоколу HTTP) так, как если бы они были заменены на безопасные URL-адреса (те, которые предоставляются по протоколу HTTPS). Эта директива предназначена для веб-сайтов с большим количеством устаревших небезопасных URL-адресов, которые необходимо переписать.
Устаревшие директивы
-
block-all-mixed-contentУстаревшее -
Запрещает загрузку любых ресурсов с использованием HTTP, когда страница загружается с использованием HTTPS.
-
plugin-typesУстаревшее Нестандартное -
Ограничивает набор плагинов, которые могут быть встроены в документ, ограничивая типы ресурсов, которые могут быть загружены.
-
referrerУстаревшее Нестандартное -
Используется для указания информации в заголовке Referer (sic) для ссылок за пределы страницы. Используйте заголовок
Referrer-Policyвместо него.
Значения
Ниже приведены общие разрешенные значения. Для подробной справки см. Значения источника CSP и документацию по отдельным директивам.
Ключевые значения
none-
Не разрешит загрузку каких-либо ресурсов.
self-
Разрешить ресурсы только из текущего источника.
strict-dynamic-
Доверие, предоставленное скрипту на странице из-за сопроводительного nonce или хеша, распространяется на скрипты, которые он загружает.
report-sample-
Требовать, чтобы в отчёте о нарушениях был образец нарушающего кода.
Небезопасные ключевые значения
unsafe-inline-
Разрешить использование встроенных ресурсов.
unsafe-eval-
Разрешить использование динамической оценки кода, например,
eval,setImmediateНестандартное , иwindow.execScriptНестандартное . unsafe-hashes-
Разрешает включение определённых встроенных обработчиков событий.
-
unsafe-allow-redirectsЭкспериментальное -
TBD
Значения хостов
- Хост
- Разрешить загрузку ресурсов только с определённого хоста, с необязательной схемой, портом и путём. Например,
example.com,*.example.com,https://*.example.com:12/path/to/file.js - Части пути в CSP, заканчивающиеся на
/соответствуют любому пути, являющемуся их префиксом. Например,example.com/api/будет соответствовать URL-адресам, таким какexample.com/api/users/new. - Другие части пути в CSP соответствуют точно, например,
example.com/file.jsбудет соответствоватьhttp://example.com/file.jsиhttps://example.com/file.js, но неhttps://example.com/file.js/file2.js
- Разрешить загрузку ресурсов только с определённого хоста, с необязательной схемой, портом и путём. Например,
- Схема
- Разрешить загрузку ресурсов только по определённой схеме, должна всегда заканчиваться "
:". Например,https:,http:,data:и т.д.
- Разрешить загрузку ресурсов только по определённой схеме, должна всегда заканчиваться "
Другие значения
- nonce-*
-
Криптографический nonce (используется только один раз) для разрешения скриптов. Сервер должен генерировать уникальное значение nonce каждый раз, когда он передаёт политику. Критически важно предоставить nonce, который нельзя угадать, так как иначе обойти политику ресурса будет тривиально. Используется совместно с атрибутом nonce тега script. Например,
nonce-DhcnhD3khTMePgXwdayK9BsMqXjhguVV - sha*-*
-
sha256, sha384 или sha512, за которым следует тире и затем значение sha*. Например,
sha256-jzgBGA4UWFFmpOBq0JpdsySukE1FrEN5bUpoK8Z29fY=
CSP в работниках
Работники (workers) в целом не регулируются политикой безопасности содержимого документа (или родительского работника), который их создал. Чтобы указать политику безопасности содержимого для работника, установите заголовок Content-Security-Policy в ответе на запрос, который запросил сам скрипт работника.
Исключением является случай, когда источник скрипта работника является глобальным уникальным идентификатором (например, если его URL имеет схему data или blob). В этом случае работник наследует политику безопасности содержимого документа или работника, который его создал.
Множественные политики безопасности содержимого
Механизм CSP позволяет указывать несколько политик для ресурса, в том числе через заголовок Content-Security-Policy , заголовок Content-Security-Policy-Report-Only и элемент <meta>.
Вы можете использовать заголовок Content-Security-Policy более одного раза, как в примере ниже. Обратите особое внимание на директиву connect-src здесь. Даже если вторая политика разрешит подключение, первая политика содержит connect-src 'none'. Добавление дополнительных политик может только дополнительно ограничить возможности защищаемого ресурса, что означает, что подключение не будет разрешено и, как самая строгая политика, будет применена connect-src 'none'.
Content-Security-Policy: default-src 'self' http://example.com; connect-src 'none'; Content-Security-Policy: connect-src http://example.com/; script-src http://example.com/
Примеры
Пример: Отключить небезопасные встроенные/eval, разрешить загрузку ресурсов (изображений, шрифтов, скриптов и т. д.) только по протоколу https:
Использование HTTP-заголовка
Content-Security-Policy: default-src https:
Использование элемента HTML meta
<meta http-equiv="Content-Security-Policy" content="default-src https:" />
Пример: уже существующий сайт, использующий слишком много встроенного кода, который необходимо исправить, но при этом нужно гарантировать, что ресурсы загружаются только через HTTPS и отключить плагины:
Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'
Пример: пока не внедрять вышеуказанную политику; вместо этого просто сообщать о нарушениях, которые могли бы произойти:
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/
См. Руководства по безопасности веб-сайтов Mozilla для получения дополнительных примеров.
Спецификации
| Спецификация |
|---|
| Политика безопасности контента уровня 3 # csp-header |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
Content-Security-Policy |
25
14
|
14 |
23
4
|
10
Только директива 'sandbox' поддерживается.
|
15 |
7
6
|
Да |
Да |
23 |
Да |
7
6
|
Да |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
base-uri |
40 |
79 |
35 |
Нет |
27 |
10 |
Да |
Да |
35 |
Да |
9.3 |
Да |
block-all-mixed-content |
Да |
≤79 |
48 |
Нет |
Да |
Нет |
Да |
Да |
48 |
Да |
Нет |
Да |
child-src |
40 |
15 |
45 |
Нет |
27 |
10 |
Да |
Да |
45 |
Да |
9.3 |
Да |
connect-src |
25 |
14 |
23
До Firefox 50, атрибуты ping элементов <a> не охватывались connect-src.
|
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
default-src |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
font-src |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
form-action |
40 |
15 |
36 |
Нет |
27 |
10 |
Да |
Да |
36 |
Да |
9.3 |
Да |
frame-ancestors |
40 |
15 |
33
До Firefox 58,
frame-ancestors игнорируется в Content-Security-Policy-Report-Only. |
Нет |
26 |
10 |
Да |
Да |
33
До Firefox for Android 58,
frame-ancestors игнорируется в Content-Security-Policy-Report-Only. |
Да |
9.3 |
Да |
frame-src |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
img-src |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
manifest-src |
Да |
79 |
41 |
Нет |
Да |
Нет |
Да |
Да |
41 |
Да |
Нет |
Да |
media-src |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
meta-element-support |
Да |
≤18 |
45 |
Нет |
Да |
Да |
Да |
Да |
45 |
Да |
Да |
Да |
object-src |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
plugin-types |
40-90 |
15-90 |
Нет |
Нет |
27-76 |
10 |
Да-90 |
Да-90 |
Нет |
Да-64 |
9.3 |
Да-15.0 |
prefetch-src |
Нет
См. ошибку 801561.
|
Нет
См. ошибку 801561.
|
Нет
См. ошибку 1457204.
|
Нет |
Нет
См. ошибку 801561.
|
Нет
См. ошибку 185070.
|
Нет
См. ошибку 801561.
|
Нет
См. ошибку 801561.
|
Нет
См. ошибку 1457204.
|
Нет
См. ошибку 801561.
|
Нет
См. ошибку 185070.
|
Нет
См. ошибку 801561.
|
referrer |
33-56 |
Нет |
37-62 |
Нет |
20-43 |
Нет |
4.4.3-56 |
33-56 |
37-62 |
20-43 |
Нет |
2.0-6.0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
report-sample |
59 |
≤79 |
Нет |
Нет |
46 |
15.4 |
59 |
59 |
Нет |
43 |
15.4 |
7.0 |
report-to |
70 |
79 |
Нет |
Нет |
57 |
Нет |
70 |
70 |
Нет |
49 |
Нет |
10.0 |
report-uri |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
require-sri-for |
54 |
79 |
Нет |
Нет |
41 |
Нет |
54 |
54 |
Нет |
41 |
Нет |
6.0 |
require-trusted-types-for |
83 |
83 |
Нет |
Нет |
69 |
Нет |
83 |
83 |
Нет |
59 |
Нет |
13.0 |
sandbox |
25 |
14 |
50 |
10 |
15 |
7 |
Да |
Да |
50 |
Да |
7 |
Да |
script-src |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
script-src-attr |
75 |
79 |
105
preview
|
Нет |
62 |
Нет |
75 |
75 |
Нет |
54 |
Нет |
11.0 |
script-src-elem |
75 |
79 |
105
preview
|
Нет |
62 |
Нет |
75 |
75 |
Нет |
54 |
Нет |
11.0 |
strict-dynamic |
52 |
79 |
52 |
Нет |
39 |
15.4 |
52 |
52 |
Нет |
41 |
15.4 |
6.0 |
style-src |
25 |
14 |
23 |
Нет |
15 |
7 |
Да |
Да |
23 |
Да |
7 |
Да |
style-src-attr |
75 |
79 |
105
preview
|
Нет |
62 |
Нет |
75 |
75 |
Нет |
54 |
Нет |
11.0 |
style-src-elem |
75 |
79 |
105
preview
|
Нет |
62 |
Нет |
75 |
75 |
Нет |
54 |
Нет |
11.0 |
trusted-types |
83 |
83 |
Нет |
Нет |
69 |
Нет |
83 |
83 |
Нет |
Нет |
Нет |
13.0 |
unsafe-hashes |
69 |
79 |
Нет
См. ошибку 1343950.
|
Нет |
56 |
15.4 |
69 |
69 |
Нет
См. ошибку 1343950.
|
48 |
15.4 |
10.0 |
upgrade-insecure-requests |
43 |
17 |
42 |
Нет |
30 |
10.1 |
43 |
43 |
42 |
30 |
10.3 |
4.0 |
worker-src |
59
Chrome 59 и выше пропускает устаревшую директиву
child-src. |
79 |
58 |
Нет |
46
Opera 46 и выше пропускает устаревшую директиву
child-src. |
15.5 |
59
Chrome 59 и выше пропускает устаревшую директиву
child-src. |
59
Chrome 59 и выше пропускает устаревшую директиву
child-src. |
58 |
43
Opera 43 и выше пропускает устаревшую директиву
child-src. |
15.5 |
7.0 |
worker_support |
Да |
≤79 |
50 |
Нет |
Да |
10 |
Да |
Да |
50 |
Да |
10 |
Да |
|---|
См. также
Content-Security-Policy-Report-Only- Узнайте о: политике безопасности контента
- Безопасность контента в WebExtensions
- Принятие строгой политики
- Оцениватель CSP - Оцените вашу политику безопасности контента
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy