Spec-Zone.ru › HTTP

Заголовки: Content-Security-Policy

Заголовок Content-Security-Policy (CSP)

Базовая поддержка Широко доступно *

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с августа 2016 года.

* Некоторые части этой функции могут поддерживаться на разных уровнях.

  • Подробнее
  • Полная информация о совместимости
>

HTTP-заголовок ответа Content-Security-Policy позволяет администраторам веб-сайтов контролировать ресурсы, которые пользовательский агент может загружать для данной страницы. За несколькими исключениями, политики в основном задают источники серверов и конечные точки скриптов. Это помогает защититься от атак типа межсайтового скриптинга.

О нарушениях можно сообщать с помощью Reporting API. Отчёты можно просматривать на странице, для которой применяется политика, используя ReportingObserver, а также отправлять на конечные точки сервера, заданные в HTTP-заголовке ответа Reporting-Endpoints и выбранные с помощью директивы CSP report-to. Дополнительные сведения см. в разделе CSPViolationReport.

Подробные сведения о том, как CSP передаётся браузеру, как она выглядит, а также о вариантах использования и стратегиях развёртывания см. в руководстве Content Security Policy (CSP).

Тип заголовка Заголовок ответа

Синтаксис

Content-Security-Policy: <policy-directive>; <policy-directive>

где <policy-directive> состоит из: <directive> <value> без внутренних знаков препинания.

Директивы

>

Директивы загрузки

Директивы загрузки определяют источники, из которых можно загружать ресурсы определённых типов.

child-src

Определяет допустимые источники для веб-воркеров и вложенных контекстов просмотра, загружаемых с помощью таких элементов, как <frame> и <iframe>.

Резервная директива для frame-src и worker-src.

connect-src

Ограничивает URL-адреса, которые можно загружать с помощью скриптовых интерфейсов.

default-src

Служит резервной директивой для других директив загрузки.

Резервная директива для всех остальных директив загрузки.

fenced-frame-src

Задаёт допустимые источники для вложенных контекстов просмотра, загружаемых в элементы <fencedframe>.

font-src

Задаёт допустимые источники для шрифтов, загружаемых с помощью @font-face.

frame-src

Задаёт допустимые источники для вложенных контекстов просмотра, загружаемых в такие элементы, как <frame> и <iframe>.

img-src

Задаёт допустимые источники изображений и значков сайта.

manifest-src

Задаёт допустимые источники файлов манифеста приложения.

media-src

Задаёт допустимые источники для загрузки мультимедиа с помощью элементов <audio>, <video> и <track>.

object-src

Задаёт допустимые источники для элементов <object> и <embed>.

prefetch-src

Задаёт допустимые источники для предварительной загрузки или предварительного отображения.

script-src

Задаёт допустимые источники для ресурсов JavaScript и WebAssembly.

Резервная директива для script-src-elem и script-src-attr.

script-src-elem

Задаёт допустимые источники для элементов <script> JavaScript.

script-src-attr

Задаёт допустимые источники для встроенных обработчиков событий JavaScript.

style-src

Задаёт допустимые источники таблиц стилей.

Резервная директива для style-src-elem и style-src-attr.

style-src-elem

Задаёт допустимые источники для элементов таблиц стилей <style> и элементов <link> с rel="stylesheet".

style-src-attr

Задаёт допустимые источники для встроенных стилей, применённых к отдельным элементам DOM.

worker-src

Задаёт допустимые источники для скриптов Worker, SharedWorker или ServiceWorker.

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

Резервные директивы

Некоторые директивы загрузки служат резервными для других, более конкретных директив. Это означает, что если более конкретная директива не задана, резервная директива определяет политику для соответствующего типа ресурсов.

  • default-src служит резервной директивой для всех остальных директив загрузки.
  • script-src служит резервной директивой для script-src-attr и script-src-elem.
  • style-src служит резервной директивой для style-src-attr и style-src-elem.
  • child-src служит резервной директивой для frame-src и worker-src.

Например:

  • Если img-src не указана, но указана default-src, то к изображениям будет применяться политика, заданная default-src.
  • Если script-src-elem не указана, но указана script-src, то к элементам <script> будет применяться политика, заданная script-src.
  • Если script-src-elem и script-src не указаны, но указана default-src, то к элементам <script> будет применяться политика, заданная default-src.

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

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

base-uri

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

sandbox

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

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

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

form-action

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

frame-ancestors

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

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

Директивы отчётности задают URL назначения для отчётов о нарушениях CSP в Content-Security-Policy и Content-Security-Policy-Report-Only.

report-to

Передаёт браузеру токен, указывающий конечную точку или группу конечных точек для отправки сведений о нарушениях CSP. Конечные точки, обозначенные этим токеном, задаются в других HTTP-заголовках, таких как Reporting-Endpoints и Report-To .

Предупреждение: Эта директива предназначена для замены report-uri; в браузерах, поддерживающих report-to, директива report-uri игнорируется. Однако, пока report-to не получит широкую поддержку, следует указывать оба заголовка, как показано ниже (где endpoint_name — имя отдельно заданной конечной точки):

Content-Security-Policy: …; report-uri https://endpoint.example.com; report-to endpoint_name

Другие директивы

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.

report-uri

Передаёт браузеру URL-адрес, на который следует отправлять отчёты о нарушениях CSP. Эта директива заменена директивой report-to.

Синтаксис директив загрузки

Для всех директив загрузки можно указать одно из следующих значений:

  • единственное значение 'none', означающее, что загрузка ресурсов соответствующего типа полностью запрещена
  • одно или несколько значений выражений источника, задающих допустимые источники для этого типа ресурсов.

Каждое выражение источника принимает одну из перечисленных ниже форм. Обратите внимание: не все формы применимы ко всем директивам загрузки. Чтобы узнать, какие формы применимы к конкретной директиве, см. её документацию.

Форматы <host-source> и <scheme-source> должны указываться без кавычек, а все остальные форматы следует заключать в одинарные кавычки.

'nonce-<nonce_value>'

Это значение состоит из строки nonce-, за которой следует значение nonce. В значении nonce можно использовать любые символы из Base64 или URL-безопасного Base64.

Эта строка представляет собой случайное значение, которое сервер генерирует для каждого HTTP-ответа. Например:

'nonce-416d1177-4d12-4e3b-b7c9-f6c409789fb8'

Затем сервер может указать то же значение в качестве значения атрибута nonce любого ресурса <script> или <style>, который необходимо загрузить из документа.

Браузер сравнивает значение из директивы CSP со значением атрибута элемента и загружает ресурс только в случае их совпадения.

Если директива содержит nonce и unsafe-inline, браузер игнорирует unsafe-inline.

Дополнительные сведения об использовании см. в разделе Nonce руководства по CSP.

Примечание: Выражения источника nonce применимы только к элементам <script> и <style>.

'<hash_algorithm>-<hash_value>'

Это значение состоит из строки, указывающей алгоритм хеширования, за которой следует -, а затем — значение хеша. В значении хеша можно использовать любые символы из Base64 или URL-безопасного Base64.

  • Идентификатор алгоритма хеширования должен быть одним из следующих: sha256, sha384 или sha512.
  • Значение хеша — это хеш в кодировке base64 ресурса <script> или <style>, вычисленный с помощью одной из следующих хеш-функций: SHA-256, SHA-384 или SHA-512.

Например:

'sha256-cd9827ad...'

Когда браузер получает документ, он вычисляет хеш содержимого всех элементов <script> и <style>, сравнивает результат со всеми хешами в директиве CSP и загружает ресурс только при совпадении.

Если элемент загружает внешний ресурс (например, с помощью атрибута src), необходимо также задать для элемента атрибут integrity.

Если директива содержит хеш и unsafe-inline, браузер игнорирует unsafe-inline.

Дополнительные сведения об использовании см. в разделе Хеши руководства по CSP.

Примечание: Выражения источника хеша применимы только к элементам <script> и <style>.

<host-source>

URL или IP-адрес хоста, являющегося допустимым источником ресурса.

Схема, номер порта и путь являются необязательными.

Если схема не указана, используется схема источника документа.

При сопоставлении схем допускается переход на более безопасную схему. Например:

  • http://example.com также разрешит ресурсы из https://example.com
  • ws://example.org также разрешит ресурсы из wss://example.org.

Подстановочные знаки ('*') можно использовать для поддоменов, адреса хоста и номера порта, указывая, что допустимы все разрешённые значения каждого из них. Например:

  • http://*.example.com разрешает ресурсы с любого поддомена example.com по HTTP или HTTPS.

Пути, заканчивающиеся на /, соответствуют всем путям, для которых они являются префиксом. Например:

  • example.com/api/ разрешит ресурсы из example.com/api/users/new.

Пути, не заканчивающиеся на /, сопоставляются точно. Например:

  • https://example.com/file.js разрешает ресурсы из https://example.com/file.js, но не из https://example.com/file.js/file2.js.

<scheme-source>

Схема, например https:. Двоеточие обязательно.

Допускается переход на более безопасную схему, поэтому:

  • http: также разрешит ресурсы, загружаемые по HTTPS
  • ws: также разрешит ресурсы, загружаемые по WSS.

'self'

Ресурсы данного типа можно загружать только с того же источника, что и документ.

Допускается переход на более безопасную схему. Например:

  • Если документ предоставляется с http://example.com, CSP со значением 'self' также разрешит ресурсы из https://example.com.
  • Если документ предоставляется с ws://example.org, CSP со значением 'self' также разрешит ресурсы из wss://example.org.

'trusted-types-eval'

По умолчанию, если CSP содержит директиву default-src или script-src, функции JavaScript, вычисляющие свои аргументы как JavaScript-код, отключаются. К ним относятся eval(), аргумент code метода setTimeout() и конструктор Function().

Ключевое слово trusted-types-eval позволяет отменить эту защиту, но только если включены Trusted Types и этим функциям передаются именно они, а не строки. Это позволяет динамически вычислять строки как JavaScript-код, но только после передачи входных данных через функцию преобразования до их внедрения. Такая функция может очистить входные данные от потенциально опасной разметки.

При использовании этих методов с trusted types вместо 'unsafe-eval' необходимо использовать trusted-types-eval. Это гарантирует, что доступ к методам будет заблокирован в браузерах, не поддерживающих trusted types.

Примечание: Разработчикам следует избегать использования trusted-types-eval или этих методов, если в этом нет крайней необходимости. Trusted Types гарантирует, что входные данные проходят через функцию преобразования, но не гарантирует, что эта функция делает их безопасными (и добиться этого может быть очень сложно).

Дополнительные сведения об использовании см. в разделе eval() и похожие API руководства по CSP.

'unsafe-eval'

По умолчанию, если CSP содержит директиву default-src или script-src, функции JavaScript, вычисляющие свои аргументы как JavaScript-код, отключаются. К ним относятся eval(), аргумент code метода setTimeout() и конструктор Function().

Ключевое слово unsafe-eval позволяет отменить эту защиту, разрешая динамически вычислять строки как JavaScript-код.

Предупреждение: Разработчикам следует избегать 'unsafe-eval', поскольку это сводит на нет большую часть преимуществ CSP. Если без этих методов не обойтись, 'trusted-types-eval' предлагает «потенциально» более безопасную альтернативу.

Дополнительные сведения об использовании см. в разделе eval() и похожие API руководства по CSP.

'wasm-unsafe-eval'

По умолчанию, если CSP содержит директиву default-src или script-src, странице запрещено компилировать WebAssembly с помощью таких функций, как WebAssembly.compileStreaming().

Ключевое слово wasm-unsafe-eval позволяет отменить эту защиту. Это гораздо более безопасная альтернатива 'unsafe-eval', поскольку она не включает возможность произвольного выполнения JavaScript.

'unsafe-inline'

По умолчанию, если CSP содержит директиву default-src или script-src, встроенному JavaScript запрещено выполняться. К нему относятся:

  • встроенные теги <script>
  • встроенные атрибуты обработчиков событий
  • URL-адреса javascript:.

Аналогично, если CSP содержит default-src или директиву style-src, встроенный CSS не будет загружен. К нему относятся:

  • встроенные теги <style>
  • атрибуты style.

Ключевое слово unsafe-inline позволяет отменить эту защиту и разрешить загрузку всех перечисленных форм.

Предупреждение: Разработчикам следует избегать 'unsafe-inline', поскольку это сводит на нет большую часть преимуществ CSP.

Дополнительные сведения об использовании см. в разделе Встроенный JavaScript руководства по CSP.

'unsafe-hashes'

По умолчанию, если CSP содержит директиву default-src или script-src, встроенные атрибуты обработчиков событий, такие как onclick, и встроенные атрибуты style выполнять нельзя.

Выражение 'unsafe-hashes' позволяет браузеру использовать хеш-выражения для встроенных обработчиков событий и атрибутов style. Например, CSP может содержать такую директиву:

script-src 'unsafe-hashes' 'sha256-cd9827ad...'

Если значение хеша совпадает с хешем значения встроенного атрибута обработчика событий или атрибута style, выполнение кода будет разрешено.

Предупреждение: Значение 'unsafe-hashes' небезопасно.

В частности, оно позволяет провести атаку, при которой содержимое встроенного атрибута обработчика событий внедряется в документ как встроенный элемент <script>. Предположим, встроенный обработчик событий выглядит так:

<button onclick="transferAllMyMoney()">Transfer all my money</button>

Если злоумышленник может внедрить встроенный элемент <script> с этим кодом, CSP разрешит его автоматическое выполнение.

Тем не менее 'unsafe-hashes' гораздо безопаснее, чем 'unsafe-inline'.

'inline-speculation-rules'

По умолчанию, если CSP содержит директиву default-src или script-src, встроенному JavaScript запрещено выполняться. Директива 'inline-speculation-rules' позволяет браузеру загружать встроенные элементы <script>, у которых атрибут type имеет значение speculationrules.

Дополнительные сведения см. в разделе API правил предварительной загрузки.

'strict-dynamic'

Ключевое слово 'strict-dynamic' позволяет распространить доверие, предоставленное скрипту с помощью nonce или хеша, на скрипты, которые этот скрипт загружает динамически, например создавая новые теги <script> с помощью Document.createElement() и затем добавляя их в документ с помощью Node.appendChild().

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

  • <host-source>
  • <scheme-source>
  • 'self'
  • 'unsafe-inline'

Дополнительную информацию об использовании см. в разделе Ключевое слово strict-dynamic руководства по CSP.

'report-sample'

Если это выражение включено в директиву, управляющую скриптами или стилями, и директива приводит к блокировке браузером встроенных скриптов, встроенных стилей или атрибутов обработчиков событий, то отчёт о нарушении, который создаёт браузер, будет содержать свойство sample с первыми 40 символами заблокированного ресурса.

CSP в рабочих потоках

Рабочие потоки обычно не регулируются политикой безопасности содержимого документа (или родительского рабочего потока), который их создал. Чтобы задать политику безопасности содержимого для рабочего потока, установите заголовок ответа 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/

Примеры

>

Запретить небезопасный встроенный код и разрешить ресурсы только по HTTPS

Этот HTTP-заголовок задаёт политику по умолчанию, разрешающую загружать ресурсы (изображения, шрифты, скрипты и т. д.) только по HTTPS. Поскольку директивы unsafe-inline и unsafe-eval не заданы, встроенные скрипты будут заблокированы.

Content-Security-Policy: default-src https:

Те же ограничения можно применить с помощью элемента HTML <meta>.

<meta http-equiv="Content-Security-Policy" content="default-src https:" />

Разрешить встроенный код и ресурсы по HTTPS, но отключить плагины

Эту политику можно использовать на существующем сайте, где слишком много встроенного кода, чтобы исправить его, — она гарантирует, что ресурсы загружаются только по HTTPS, и отключает плагины:

Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'

Сообщать о нарушениях, но не применять ограничения во время тестирования

В этом примере задаются те же ограничения, что и в предыдущем, но используются заголовок Content-Security-Policy-Report-Only и директива report-to. Такой подход применяется во время тестирования: о нарушениях сообщается, но выполнение кода не блокируется.

Конечные точки (URL), на которые отправляются отчёты, задаются с помощью HTTP-заголовка ответа Reporting-Endpoints.

Reporting-Endpoints: csp-endpoint="https://example.com/csp-reports"

Затем в политике CSP с помощью директивы report-to в качестве целевого адреса отчёта выбирается конкретная конечная точка.

Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-url/; report-to csp-endpoint

Обратите внимание, что выше также указана директива report-uri, поскольку report-to пока не поддерживается большинством браузеров.

Другие примеры см. в разделе Реализация политики безопасности содержимого (CSP).

Спецификации

Спецификация
Политика безопасности содержимого, уровень 3>
# csp-header>

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

Настольные Мобильные
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari для iOS Samsung Internet WebView для Android WebView для iOS
Content-Security-Policy 2514 14 234 15 76 2518 23 1414 76 1.51.0 4.44.4 76
base-uri 40 79 35 27 10 40 35 27 9.3 4.0 40 9.3
block-all-mixed-content
44Будет удалено, см. ошибку 40260100.
79Будет удалено, см. ошибку 40260100.
48–122
31Будет удалено, см. ошибку 40260100.
10
44Будет удалено, см. ошибку 40260100.
48–122
32Будет удалено, см. ошибку 40260100.
10
4.0Будет удалено, см. ошибку 40260100.
44Будет удалено, см. ошибку 40260100.
10
child-src 40 15 45 27 10 40 45 27 9.3 4.0 40 9.3
connect-src 25 14 50
23–50До Firefox 50 атрибуты ping элементов <a> не учитывались директивой connect-src.
15 7 25 23 14 7 1.5 4.4 7
default-src 25 14 23 15 7 25 23 14 7 1.5 4.4 7
fenced-frame-src 126 126 Нет 112 Нет 126 Нет 83 Нет 28.0 126 Нет
font-src 25 14 23 15 7 25 23 14 7 1.5 4.4 7
form-action 40 15 36 27 10 40 36 27 9.3 4.0 40 9.3
frame-ancestors 40 15 58
33–58До Firefox 58 директива frame-ancestors игнорировалась в Content-Security-Policy-Report-Only.
26 10 40 58
33–58До Firefox для Android 58 директива frame-ancestors игнорировалась в Content-Security-Policy-Report-Only.
27 9.3 4.0 40 9.3
frame-src 25 14 23 15 7 25 23 14 7 1.5 4.4 7
img-src 25 14 23 15 7 25 23 14 7 1.5 4.4 7
manifest-src 40 79 41 27 11 40 41 27 11 4.0 40 11
media-src 25 14 23 15 7 25 23 14 7 1.5 4.4 7
meta-element-support 25 ≤18 45 15 7 25 45 14 7 1.5 4.4 7
object-src 25 14 23 15 7 25 23 14 7 1.5 4.4 7
prefetch-src Нет Нет Нет Нет 16.3 Нет Нет Нет 16.3 Нет Нет 16.3
report-sample 59 79 63 46 15.4 59 63 43 15.4 7.0 59 15.4
report-to 70 79 149 57 16.4 70 149 49 16.4 10.0 70 16.4
report-uri 25 14 23 15 7 25 23 14 7 1.5 4.4 7
require-trusted-types-for 83 83 148 69 26 83 148 59 26 13.0 83 26
sandbox 25 14 50 15 7 25 50 14 7 1.5 4.4 7
script-src 25 14 23 15 7 25 23 14 7 1.5 4.4 7
script-src-attr 75 79 108 62 15.4 75 108 54 15.4 11.0 75 15.4
script-src-elem 75 79 108 62 15.4 75 108 54 15.4 11.0 75 15.4
strict-dynamic 52 79 52 39 15.4 52 52 41 15.4 6.0 52 15.4
style-src 25 14 23 15 7 25 23 14 7 1.5 4.4 7
style-src-attr 75 79 108 62 15.4 75 108 54 15.4 11.0 75 15.4
style-src-elem 75 79 108 62 26.2
15.4–26.2Директива style-src-elem была обработана, но не повлияла на результат. См. ошибку 276931.
75 108 54 26.2
15.4–26.2Директива style-src-elem была обработана, но не повлияла на результат. См. ошибку 276931.
11.0 75 26.2
15.4–26.2Директива style-src-elem была обработана, но не повлияла на результат. См. ошибку 276931.
trusted-types 83 83 148 69 26 83 148 59 26 13.0 83 26
unsafe-hashes 69 79 109 56 15.4 69 109 48 15.4 10.0 69 15.4
upgrade-insecure-requests 43 17 42 30 10.1 43 42 30 10.3 4.0 43 10.3
worker-src
59В Chrome 59 и более поздних версиях пропускается устаревшая директива child-src.
79 58
46В Opera 46 и более поздних версиях пропускается устаревшая директива child-src.
15.5
59В Chrome для Android 59 и более поздних версиях пропускается устаревшая директива child-src.
58
43В Opera для Android 43 и более поздних версиях пропускается устаревшая директива child-src.
15.5 7.0
59В WebView для Android 59 и более поздних версиях пропускается устаревшая директива child-src.
15.5
worker_support 56 79 50 43 10 56 50 43 10 6.0 56 10

См. также

  • Content-Security-Policy-Report-Only
  • Директива CSP report-to
  • Reporting-Endpoints
  • CSPViolationReport
  • Reporting API.
  • Подробнее: политика безопасности содержимого
  • Безопасность содержимого в WebExtensions
  • Применение строгой политики
  • CSP Evaluator — оцените свою политику безопасности содержимого

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy

Spec-Zone.ru

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