Content Security Policy: Примеры использования

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

Зачем нужен Content Security Policy?

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

Основные директивы CSP

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

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

Примеры использования Content Security Policy

Пример 1: Разрешение скриптов только с текущего домена

Этот пример разрешает загрузку скриптов только с текущего домена (self):

Content-Security-Policy: script-src 'self'

Это очень строгая политика, которая может сломать функциональность, если ваш сайт использует скрипты с других доменов (например, CDN). Однако, это хороший способ защиты от XSS атак, если вы уверены, что все ваши скрипты находятся на вашем домене.

Пример 2: Разрешение скриптов с текущего домена и CDN

Этот пример разрешает загрузку скриптов с текущего домена и с CDN (например, cdn.example.com):

Content-Security-Policy: script-src 'self' https://cdn.example.com

Здесь мы добавили https://cdn.example.com в список разрешенных источников для скриптов.

Пример 3: Разрешение изображений с любого источника

Этот пример разрешает загрузку изображений с любого источника ():

Content-Security-Policy: img-src 

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

Пример 4: Разрешение стилей только с текущего домена и inline стилей

Этот пример разрешает загрузку стилей только с текущего домена и inline стилей ('unsafe-inline'):

Content-Security-Policy: style-src 'self' 'unsafe-inline'

Использование 'unsafe-inline' следует избегать, если это возможно, так как это может увеличить риск XSS атак. Лучше использовать классы CSS и внешние таблицы стилей.

Пример 5: Использование report-uri для отслеживания нарушений

Этот пример разрешает скрипты с текущего домена и отправляет отчеты о нарушениях на указанный URL:

Content-Security-Policy: script-src 'self'; report-uri /csp-report-endpoint

Браузер будет отправлять JSON-отчеты на /csp-report-endpoint каждый раз, когда CSP блокирует загрузку ресурса.

Как внедрить Content Security Policy

CSP можно внедрить двумя способами:

  1. HTTP-заголовок: Это наиболее рекомендуемый способ. Вы можете добавить заголовок Content-Security-Policy в ответ сервера.

Рекомендации

  • Начните с менее строгой политики: Начните с политики, которая разрешает большинство ресурсов, а затем постепенно ужесточайте ее, чтобы избежать поломки функциональности вашего сайта.
  • Используйте report-uri или report-to: Это поможет вам отслеживать нарушения CSP и выявлять проблемы с вашей политикой.
  • Тестируйте свою политику: Тщательно протестируйте свою политику, чтобы убедиться, что она не ломает функциональность вашего сайта.
  • Используйте CSP в сочетании с другими мерами безопасности: CSP – это только один из инструментов безопасности. Используйте его в сочетании с другими мерами, такими как защита от CSRF и валидация входных данных.

Важно: Разработка и внедрение CSP требует тщательного планирования и тестирования. Неправильно настроенная политика может привести к поломке функциональности вашего сайта. Поэтому, рекомендуется начинать с менее строгой политики и постепенно ужесточать ее, отслеживая нарушения и исправляя проблемы.