Генератор Content Security Policy (CSP)
Соберите директиву Content-Security-Policy по пунктам, экспортируйте её как заголовок, мета-тег, конфигурацию Nginx или Apache и получите предупреждения о небезопасных настройках.
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests">
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests" always;
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
Импортировать существующую политику
Что такое Генератор CSP?
Генератор помогает написать Content-Security-Policy, ограничивающую, откуда могут загружаться скрипты, стили, изображения, фреймы и другие ресурсы. Он начинает со строгой политики, позволяет править каждую директиву и оценивает результат вживую, предупреждая о слабых местах: 'unsafe-inline', подстановочные источники скриптов, отсутствие object-src или base-uri и ключевые слова без кавычек. Можно также импортировать существующую политику.
Как пользоваться Генератор CSP
- Начните со строгой начальной политики или с очистки всех директив.
- Отредактируйте источники каждой директивы, например
'self' https://cdn.example.com. - Включите upgrade-insecure-requests и при необходимости добавьте report-uri.
- Прочитайте оценку политики и исправьте находки высокой и средней важности.
- Скопируйте политику как HTTP-заголовок, мета-тег, строку для Nginx или Apache либо импортируйте существующую политику для анализа.
Пример
Strict starter policy
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
Когда использовать Генератор CSP
Используйте для составления или проверки CSP перед развёртыванием. Новые политики сначала выкатывайте как Content-Security-Policy-Report-Only и следите за нарушениями, потому что строгая политика сломает встроенные скрипты и сторонние виджеты, которые вы забыли разрешить. Проверки статические и не видят, какие скрипты ваши страницы действительно загружают.
Как работает Генератор CSP
Директивы сериализуются в фиксированном порядке как name source source; …, пустые пропускаются. Оценка применяет статические правила, подобные Google CSP Evaluator: ключевые слова вроде self или none нужно брать в кавычки; script-src (или default-src как запасной) без nonce/хеша с 'unsafe-inline', 'unsafe-eval', *, http:, https: или data: помечается; object-src должен быть 'none'; base-uri, frame-ancestors и form-action должны быть заданы. Версия для мета-тега опускает frame-ancestors, report-uri, report-to и sandbox, которые браузеры в мета-тегах игнорируют.
Распространенные Случаи Использования
- Создать первую строгую CSP для нового сайта.
- Проверить политику, скопированную с продакшена, на 'unsafe-inline' и подстановки.
- Правильно добавить хост аналитики или CDN в script-src.
- Получить точную строку add_header для Nginx для политики.
Часто Задаваемые Вопросы
Почему 'unsafe-inline' это проблема?
Он разрешает любой встроенный скрипт, в том числе внедрённый через XSS-уязвимость, что сводит на нет основную цель CSP. Используйте nonce или хеши.
Заголовок или мета-тег?
Предпочитайте HTTP-заголовок. Мета-тег не может использовать frame-ancestors, report-uri и sandbox и действует только на содержимое после него.
Как проверить, не сломав сайт?
Отправьте ту же политику как Content-Security-Policy-Report-Only; браузеры сообщат о нарушениях в консоли, ничего не блокируя.