CSP

Content Security Policy (W3C CSP3) — HTTP-заголовок или meta-тег, который говорит браузеру: откуда можно грузить скрипты, стили, шрифты, картинки, что можно исполнять inline и т.д. Основная защита от XSS.

Основные директивы

ДирективаЧто регулирует
default-srcфолбэк для всех остальных
script-srcJS-файлы, inline <script>
style-srcCSS, inline style
img-srcкартинки
connect-srcfetch, XHR, WebSocket, EventSource
font-srcшрифты
frame-srciframe (заменил child-src)
frame-ancestorsкто может встроить нас в iframe (замена X-Frame-Options)
form-actionкуда можно сабмитить <form>
base-uri<base> тег
upgrade-insecure-requestsпринудительно http→https
report-to, report-uriкуда слать нарушения

Значения источников

Пример строгий

Content-Security-Policy:
  default-src 'none';
  script-src 'self' 'nonce-r4nd0m';
  style-src 'self';
  img-src 'self' data:;
  connect-src 'self' https://api.example.com;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self';
  report-to csp-endpoint

Report-Only режим

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report

Нарушения логируются, но не блокируются. Для внедрения CSP без ломки.

Nonce vs hash vs 'unsafe-inline'

См. также