Content Security Policy (CSP) — механізм захисту в браузері, за допомогою якого сайт зазначає, звідки дозволено завантажувати скрипти, стилі, фрейми та інший вміст, обмежуючи наслідки атак упровадження.
Як працює CSP
Сервер передає політику в заголовку відповіді HTTPContent-Security-Policy. Після цього браузер відмовляється завантажувати чи виконувати все, що політика не дозволяє. Важливі директиви:
- default-src і script-src — дозволені джерела вмісту та JavaScript; вбудовані скрипти блокуються, якщо не мають відповідного nonce чи хешу;
- ‘strict-dynamic’ — довіра до скриптів, завантажених уже довіреними скриптами, що робить політики на основі nonce практичними;
- frame-ancestors — які сайти можуть вбудовувати сторінку у фрейм;
- connect-src і form-action — куди сторінка може надсилати дані;
- report-to — куди надсилаються звіти про порушення.
Українською CSP іноді називають політикою безпеки вмісту. Заголовок Content-Security-Policy-Report-Only дає змогу перевірити політику, нічого не блокуючи. CSP стандартизовано W3C; актуальна версія — Level 3.
Чому CSP важлива
CSP — додатковий ешелон захисту від міжсайтового скриптингу: навіть якщо зловмиснику вдалося впровадити тег script, браузер його не виконає. Директива frame-ancestors запобігає клікджекінгу, а обмеження адрес для з’єднань заважає скімерам формджекінгу надсилати викрадені дані карток на домени зловмисників. Утім, політика хороша рівно настільки, наскільки хороші її правила: дозвіл ‘unsafe-inline’ або цілих CDN-доменів часто робить обхід тривіальним.
Рекомендації
- Віддавати перевагу суворим політикам на основі nonce чи хешів, а не довгим білим спискам доменів.
- Уникати ‘unsafe-inline’ та ‘unsafe-eval’.
- Спершу запроваджувати політику в режимі report-only і відстежувати звіти про порушення.
- Розглядати CSP як доповнення до екранування виводу й перевірки вхідних даних, а не як їхню заміну.





