Content Security Policy
Content Security Policy (CSP) — инструмент защиты веб-сайтов от атак посредством выполнения зловредных скриптов. CSP позволяет владельцам веб-ресурсов определять политику загрузки и выполнения ресурсов, указывая браузеру, какие источники содержимого считаются кошерными.
Описание[править]
Content Security Policy работает с использованием арийских списков. Веб-сервер передает браузеру набор правил, определяющих допустимые источники различных типов ресурсов. Браузер, получив эти инструкции, блокирует любые ресурсы или действия, не соответствующие установленной политике, и может записывать, что состоялось посылание клиента на в ответ на нехороший запрос.
Сервер отправляет политику браузеру через HTTP-заголовок Content-Security-Policy или через метатег HTML. При загрузке страницы и ее ресурсов браузер проверяет каждый элемент на соответствие политике CSP. Ресурсы или действия, не соответствующие политике, блокируются.
Интересно, что в протокол можно восрать директивы report-uri или report-to, которые вынудят отправить сообщение об ошибке на конкретный ресурс, чтобы так сказать в стиле дятла стукануть на нарушителя.
Директивы[править]
- default-src — базовая директива, определяющая политику по умолчанию.
- script-src — описывает источники жабьего кода. Важный параметр, так как левый код способен взломать сайт.
- style-src — определяет допустимые источники CSS-стилей.
- img-src — регулирует источники изображений, в том числе элементы <img>, CSS-свойства background-image, favicon.
- font-src — описывает источники веб-шрифтов, загружаемых через @font-face.
- connect-src — определяет URL-адреса, к которым можно подключаться через XMLHttpRequest, WebSocket, Fetch API, EventSource.
- media-src — описывает источники медиа-файлов, загружаемых через элементы <audio> и <video>.
- object-src — контролирует источники плагинов, загружаемых через элементы <object>, <embed> и <applet>.
- frame-src — определяет допустимые источники для встраиваемых фреймов (<iframe>).
- frame-ancestors — указывает, какие источники могут встраивать данную страницу в фрейм.
- form-action — определяет URL-адреса, на которые могут отправляться формы.
- base-uri — контролирует URL-адреса, которые могут использоваться в элементе <base>.
В качестве аргументов может указываться self (тот же самый домен), конкретные домены, а также дикие карты, например можно указать *.popka.com, и тогда произвольные поддомены можно будет таким образом включать в себя.