Spec-Zone.ru › HTTP

Политика безопасности контента

Политика безопасности контента

Заголовок ответа 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.

Директивы документа

Директивы документа управляют свойствами документа или среды потока обработки данных, к которому применяется политика.

base-uri

Ограничивает URL-адреса, которые могут использоваться в элементе документа <base>.

sandbox

Включает песочницу для запрашиваемого ресурса, аналогично атрибуту <iframe> sandbox.

Директивы навигации

Директивы навигации управляют тем, в какие места пользователь может перейти или отправить форму, например.

form-action

Ограничивает URL-адреса, которые могут использоваться в качестве цели отправки формы из данного контекста.

frame-ancestors

Указывает допустимые родительские элементы, которые могут встраивать страницу с помощью <frame>, <iframe>, <object>, <embed> или <applet>.

navigate-to Экспериментально

Ограничивает URL-адреса, к которым документ может инициировать навигацию любыми средствами, включая <form> (если form-action не указан), <a>, window.location, window.open и т. д.

END_OF_DOCUMENT_MARKER

Директивы отчётности

Директивы отчётности контролируют процесс отчётности о нарушениях 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

Spec-Zone.ru

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