Content Security Policy: Практическое руководство по настройке

Content Security Policy (CSP) – это мощный механизм безопасности, который помогает защитить веб-приложения от различных видов атак, таких как Cross-Site Scripting (XSS), clickjacking и data injection. CSP позволяет администраторам веб-сайтов контролировать ресурсы, которые браузеру разрешено загружать для данного сайта. В этой статье мы рассмотрим, что такое CSP, как его настроить и какие директивы доступны.

Что такое Content Security Policy?

По умолчанию, браузеры довольно свободны в загрузке ресурсов (скрипты, стили, изображения и т.д.) с любого домена. Это может быть опасно, так как злоумышленник может внедрить вредоносный код на ваш сайт, и браузер его выполнит. CSP решает эту проблему, предоставляя возможность указать браузеру, какие источники ресурсов являются доверенными.

CSP работает путем отправки HTTP-заголовка Content-Security-Policy (или Content-Security-Policy-Report-Only для тестирования) вместе с ответом сервера. Этот заголовок содержит список директив, которые определяют политику безопасности для данного сайта.

Как настроить Content Security Policy?

Существует два основных способа настройки CSP:

  1. HTTP-заголовок: Это наиболее рекомендуемый способ. Вы добавляете заголовок Content-Security-Policy в конфигурацию вашего веб-сервера (например, Apache, Nginx).

Пример настройки через HTTP-заголовок (Nginx):


add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://trusted-cdn.com; style-src 'self' https://trusted-cdn.com; img-src 'self' data:; font-src 'self';";

Основные директивы Content Security Policy

CSP предоставляет множество директив для контроля различных типов ресурсов. Вот некоторые из наиболее важных:

  • default-src: Определяет политику по умолчанию для всех типов ресурсов, если не указана более конкретная директива.
  • script-src: Определяет разрешенные источники для JavaScript-файлов.
  • style-src: Определяет разрешенные источники для CSS-файлов.
  • img-src: Определяет разрешенные источники для изображений.
  • font-src: Определяет разрешенные источники для шрифтов.
  • connect-src: Определяет разрешенные источники для запросов AJAX и WebSocket.
  • object-src: Определяет разрешенные источники для плагинов (например, Flash).
  • media-src: Определяет разрешенные источники для аудио- и видеофайлов.
  • frame-src: Определяет разрешенные источники для iframe.
  • report-uri: Указывает URL, на который браузер будет отправлять отчеты о нарушениях CSP.

Значения директив:

  • 'self': Разрешает ресурсы с того же домена, что и текущая страница.
  • 'unsafe-inline': Разрешает inline-скрипты и стили (не рекомендуется использовать в production).
  • 'unsafe-eval': Разрешает использование eval (не рекомендуется использовать в production).
  • data:: Разрешает ресурсы, закодированные в формате Data URI.
  • https:: Разрешает ресурсы, загружаемые по протоколу HTTPS.
  • *.example.com: Разрешает ресурсы с любого поддомена example.com.
  • example.com: Разрешает ресурсы только с example.com.

Режим Report-Only и тестирование

Прежде чем применять CSP в production, рекомендуется протестировать его в режиме Report-Only. В этом режиме браузер не блокирует ресурсы, которые нарушают политику, а только отправляет отчеты о нарушениях на указанный URL (report-uri). Это позволяет вам выявить проблемы и настроить политику без прерывания работы сайта.

Для использования режима Report-Only, используйте заголовок Content-Security-Policy-Report-Only вместо Content-Security-Policy.

Content Security Policy – это важный инструмент для повышения безопасности веб-приложений. Настройка CSP может быть сложной задачей, но она того стоит. Начните с базовой политики и постепенно добавляйте более строгие ограничения, тестируя изменения в режиме Report-Only. Помните, что правильно настроенный CSP может значительно снизить риск XSS-атак и других угроз безопасности.