Источники безопасного контента — Content Security Policy

Еще один механизм повышения защищенности 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 частично, в критических местах сайта, например только для админ-панели.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *