🛡️
Безопасность

CSP — защита от XSS через Content Security Policy

28.08.2033
← Все статьи

Среди атак на сайты XSS или межсайтовый скриптинг это одна из самых распространённых. В таких атаках злоумышленник пытается внедрить вредоносный код в страницу сайта и запустить его в браузерах других пользователей. В результате могут быть украдены сессии, пароли и личные данные. Один из самых эффективных способов защиты это использование заголовка Content Security Policy или CSP.

Как работает CSP

CSP это специальный HTTP заголовок который сообщает браузеру какие ресурсы можно загружать на странице, а какие нельзя. Сервер передаёт браузеру список разрешённых источников и браузер загружает ресурсы только оттуда. Даже если злоумышленник как то внедрит вредоносный скрипт, браузер его не запустит.

Сила CSP в том что защита работает на уровне браузера и не требует дополнительной серверной логики. После настройки заголовка вся защита идёт со стороны клиента и это очень быстро и надёжно. CSP контролирует не только скрипты, но и изображения, стили, фреймы и другие ресурсы.

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

В заголовке CSP используется несколько директив и каждая выполняет свою задачу. Default-src это общий fallback и определяет откуда можно грузить ресурсы по умолчанию. Script-src отдельно для скриптов и его обязательно нужно указывать отдельно потому что именно скрипты главная цель XSS атак. Style-src для стилей, img-src для изображений, frame-src для фреймов.

В каждой директиве указывается список источников. Self означает текущий сайт, none запрещает всё, конкретные домены указываются полными URL. Самая безопасная настройка начинается с default-src self с последующим добавлением нужных источников по одному.

Примеры настройки

Для обычного сайта стартовая CSP может выглядеть так. Default-src разрешает только текущий сайт, в script-src добавляются Google Fonts и аналитика, в style-src те же источники. Этого достаточно для защиты большинства простых сайтов и блокировки основных XSS атак.

Для сложных сайтов нужны механизмы nonce или hash. Nonce это случайный токен который меняется при каждой загрузке страницы и используется для разрешения inline скриптов. Это мощный механизм потому что злоумышленник не может заранее узнать значение nonce. Hash вычисляется из самого текста скрипта и разрешает выполнение только конкретного содержимого.

Частые ошибки

Первая распространённая ошибка это добавление unsafe-inline в script-src. Это практически полностью отключает защиту CSP потому что разрешает все inline скрипты, а именно они главный инструмент XSS атак. Если inline скрипты нужны, используйте nonce или hash.

Вторая ошибка это широкое использование звёздочки. Script-src звёздочка разрешает загрузку скриптов с любого источника и фактически отключает CSP. Нужно перечислять конкретные домены даже если это означает много строк конфигурации.

Режим report-only

Сразу включать CSP в принудительном режиме рискованно потому что некоторые ресурсы могут блокироваться и сайт сломается. Рекомендуется первую неделю работать в режиме report-only. В этом режиме нарушения логируются, но ресурсы не блокируются и можно спокойно исправлять ошибки. Затем переход в режим enforce будет безопасным.

Sayt.uz практика

Среди пользователей нашего хостинга 73 процента сайтов не имеют настроенного CSP и это серьёзный риск безопасности. У сайтов с настроенным CSP количество XSS инцидентов снижается в среднем на 89 процентов по нашей статистике.

В панели управления Sayt.uz есть возможность автоматической настройки CSP заголовков со стандартными конфигурациями. Для сложных сайтов мы предлагаем услугу аудита CSP от 320 тысяч сум, которая включает оптимизированные настройки под архитектуру сайта.

Похожие статьи

🛡️ Защита от ransomware: бэкапы, сегментация, EDR и реагирование на инциденты 🎣 Защита сотрудников от фишинговых атак: обучение и технические меры 📋 Чеклист аудита безопасности: WordPress, сервер, SSL и проверка резервных копий 🔐 Мониторинг SSL-сертификатов: отслеживание срока действия и авто-обновление
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English