Какова необходимость в CSP (Content Security Policy)

Для того чтобы понять, зачем существует CSP, нужно знать, что он из себя представляет. CSP (Content Security Policy) - это HTTP-заголовок, которым сервер говорит браузеру, что странице разрешено загружать и выполнять - скрипты - стили - картинки - iframe - и другие ресурсы То есть главная цель CSP - уменьшить площадь для атак на ваш сервис при помощи специальных директив в данном заголовке.

CSP-заголовки бывают 2 режимов

1. Content-Security-Police - Это боевой заголовок. Браузер реально применяет правила и блокирует всё, что нарушает политику.

2. Content-Security-Policy-Report-Only - Это режим наблюдения. Браузер не блокирует нарушение, а только фиксирует его и может отправлять отчёт. Удобно для внедрения CSP без поломки сайта.

Как устроена CSP

Как я вначале указал**, CSP состоит из директив. Каждая директива управляет отдельным типом поведения**: откуда можно загружать скрипты, куда можно отправлять формы, можно ли встраивать страницу в iframe и т.д. В спецификации CSP Level 3 есть официальный реестр таких директив, таких как - script-src - object-src - base-uri

1. Базовая директива

default-src - Это значение по умолчанию для остальных “fetch”-директив, если они отдельно не указаны. Часто с неё начинают жёсткую политику: default-src ‘none’, а потом точечно разрешают нужное. Защищает от лишней загрузки внешних ресурсов “по умолчанию”.

2. Директивы загрузки ресурсов (fetch directives)

script-src - Определяет, откуда можно загружать JavaScript и что можно выполнять как скрипт. Также влияет на inline-скрипты, обработчики событий и другие скриптовые источники. Основная защита — XSS и выполнение нежелательного JavaScript.

img-src - Определяет, откуда можно загружать изображения. Полезно против загрузки картинок с недоверенных доменов и некоторых каналов утечки данных через image-beacon.

frame-src - Определяет, откуда можно загружать iframe/frames. Защищает от встраивания недоверенного содержимого внутрь страницы.

object-src - Определяет, **откуда можно загружать и **. На практике обычно ставят object-src ‘none’, чтобы отключить устаревшие plugin-механизмы. Это снижает риск legacy plugin abuse и лишней исполняемой поверхности.

3. Директивы для навигации и документа

base-url - Определяет, **какое значение можно задавать для HTML **. Защищает от атак, где злоумышленник подменяет base URL и ломает относительные ссылки, загрузку ресурсов или маршрутизацию. _ frame-ancestors_ - Определяет, какие сайты могут встраивать вашу страницу в iframe/frame/object/embed. Это одна из главных защит от clickjacking. По смыслу часто заменяет старый X-Frame-Options.

sandbox - Включает ограниченный режим для документа, похожий на HTML sandbox у iframe: можно урезать скрипты, формы, popups и другие возможности. Полезно для жёсткой изоляции опасного или частично доверенного контента.

#cybersecurity #AppSec #HTTP #HTTP-headers

Какова необходимость в CSP (Content Security Policy) | Сетка — социальная сеть от hh.ru