Еще один механизм повышения защищенности HTTP заголовок Content Security Policy (CSP)
позволяет задать список желательных источников контента. CSP устанавливает правила использования для изображений (img-src
), шрифтов (font-src
), фреймов (frame-src
, заменен на child-src
), медиа-файлов (media-src
), внедренных объектов (object-src
), стилей (style-src
) и скриптов (script-src
), а еще для Ajax-запросов (XMLHttpRequest
) и вебсокетов (connect-src
). Загрузка с ресурсов, не предусмотренных политикой безопасности контента, блокируется. В результате злоумышленник не сможет, например, подсунуть броузеру посетителя постороннюю рекламу, не предусмотренную вашей политикой безопасности.
HTTP-заголовок Content-Security-Policy
Фактически, HTTP-заголовок Content-Security-Policy представляет собой набор «белых списков» для любого внедренного в страницу контента. Он сообщает броузеру, из каких источников можно брать контент для внедрения в страницу.
Например, следующий фрагмент задает CSP заголовок, допускающий загрузку контента исключительно с собственного сайта (the same origin only):
<IfModule mod_headers.c> Header set Content-Security-Policy "default-src 'self';" <IfModule>
Можно это сделать средствами php
:
<?php header("Content-Security-Policy: default-src 'self'");
Или с помощью Node.js
:
request.setHeader("Content-Security-Policy", "default-src 'self'");
Разрешить загрузку скриптов с CDN jQuery
можно так:
"default-src 'self'; script-src 'self' https://code.jquery.com;"
При использовании счетчиков или рекламных внедрений нужно так же предусмотреть их источники в контентной политике.
Задать CSP можно и непосредственно в коде html-страницы с помощью мета-тега Content-Security-Policy
:
<head> <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src 'self'; script-src 'self' https://code.jquery.com; style-src 'self'"> </head>
Если какое-то правило политикой не определено, используется правило, заданное в default-src
. Значение self определяет допустимым источником собственный домен. Значение none полностью блокирует загрузку соответствующего типа контента.
Content Security Policy — это политика
Определение политики безопасности контента требует продуманного подхода. Например, в случае вордпресса ограничения политики безопасности могут привести к неработоспособности темы или плагинов, например использующих CDN или внешние скрипты.
Отладку CSP можно произвести по сообщениям в консоли броузера. После отладки, в стабильном состоянии политики, есть смысл направить сообщения директивой report-uri на заданный адрес в виде POST-запросов в формате JSON. Эти запросы можно отдельно обрабатывать или сохранять в лог.
Для того, чтобы легче было определиться с политикой, можно использовать заголовок Content-Security-Policy-Report-Only, который только выдает сообщения, но не блокирует ресурсы.
В сложных случаях можно порекомендовать использование CSP частично, в критических местах сайта, например только для админ-панели.