В веб-приложениях контент, такой как скрипты, стили, шрифты и изображения, обычно загружается с разных серверов и доменов. Поэтому при включении строгой политики CSP часть функциональности может нарушиться или сайт вовсе перестанет работать.
Для упрощения внедрения CSP можно сначала включить режим report-only. В этом режиме политика не блокирует загрузку ресурсов, но фиксирует все нарушения и отправляет отчеты на указанный в заголовке адрес.
Рассказываем, как создать безопасные рабочие настройки CSP.
- Напишите полный список всех запросов и источников контента вашего приложения.
- Максимально сократите количество используемых источников.
- Создайте черновик строгих правил CSP с параметром report-only и запустите тестирование, чтобы выявить нарушения.
- Проанализируйте отчеты, уточните правила CSP или перенесите контент, чтобы устранить нарушения.
Кроме этого, важно настроить отчеты о нарушениях CSP.
Для этого помимо установки заголовка Content-Security-Policy-Report-Only необходимо указать параметр report-to — адрес, на который будут отправляться уведомления о нарушениях CSP в формате JSON.
Также существует устаревшая директива report-uri, которая позволяет указать URI эндпоинта для получения отчетов о нарушениях через HTTP POST-запрос. Директива report-to должна заменить report-uri, но пока поддерживается не всеми браузерами.
Чтобы обеспечить совместимость с текущими версиями браузеров и подготовиться к будущей поддержке report-to, рекомендуем указывать обе директивы одновременно. В браузерах с поддержкой report-to директива report-uri будет игнорироваться.
Для повышения безопасности рекомендуем придерживаться следующих принципов:
- Применяйте жесткие настройки, указывайте 'self', а для встроенных скриптов используйте nonce или hash.
- Откажитесь от unsafe-inline и не допускайте разрешения всех источников с помощью символа *.
- Начинайте с режима report-only, но не задерживайтесь на нем слишком долго — своевременно переходите в активный боевой режим.
На платформе Start EDU подробно разбираем, как настраивать CSP так, чтобы он блокировал атаки, а еще даем практические задания на поиск уязвимостей в приложениях.
Запишитесь на бесплатное демо, и наш эксперт расскажет, как Start EDU помогает продуктовым командам предотвращать уязвимости и сразу писать безопасный код.