Content Security Policy (CSP) – это мощный механизм безопасности, который позволяет веб-разработчикам контролировать ресурсы, которые браузер может загружать для конкретной страницы. Это значительно снижает риск атак, таких как межсайтовый скриптинг (XSS), внедрение вредоносного кода и других, связанных с несанкционированным выполнением скриптов и загрузкой ресурсов.
Что такое Sandbox и почему нужна защита?
Sandbox (песочница) – это изолированная среда выполнения кода. В контексте веб-браузеров, это означает, что скрипты, выполняемые на веб-странице, должны быть ограничены в доступе к системным ресурсам и данным пользователя. Однако, если злоумышленник сможет внедрить вредоносный код (например, через XSS), он может попытаться «вырваться» из песочницы и получить доступ к конфиденциальной информации или выполнить вредоносные действия.
CSP помогает усилить песочницу, определяя, какие источники ресурсов (скрипты, стили, изображения, шрифты и т.д.) разрешены для загрузки и выполнения. Это ограничивает возможности злоумышленника, даже если ему удастся внедрить вредоносный код.
Как работает Content Security Policy?
CSP работает путем отправки HTTP-заголовка Content-Security-Policy (или Content-Security-Policy-Report-Only для тестирования) от сервера к браузеру. Этот заголовок содержит директивы, которые указывают браузеру, какие ресурсы разрешено загружать и откуда.
Основные директивы CSP:
- default-src: Устанавливает политику по умолчанию для всех типов ресурсов, если не указаны более конкретные директивы.
- script-src: Определяет разрешенные источники для JavaScript-скриптов.
- style-src: Определяет разрешенные источники для таблиц стилей (CSS).
- img-src: Определяет разрешенные источники для изображений.
- font-src: Определяет разрешенные источники для шрифтов.
- connect-src: Определяет разрешенные источники для запросов, выполняемых с помощью XMLHttpRequest (AJAX), WebSockets и EventSource.
- object-src: Определяет разрешенные источники для плагинов (например, Flash).
- media-src: Определяет разрешенные источники для аудио- и видеоконтента.
- frame-src: Определяет разрешенные источники для фреймов (
<iframe>).
Примеры директив:
script-src 'self': Разрешает выполнение скриптов только с того же домена, что и сама страница.img-src 'self' data:: Разрешает загрузку изображений с того же домена и из data URI (встроенные изображения).connect-src https://api.example.com: Разрешает AJAX-запросы только кhttps://api.example.com.
Реализация CSP
CSP можно реализовать двумя способами:
- HTTP-заголовок: Рекомендуемый способ. Настраивается на стороне сервера.
- Meta-тег: Можно использовать для простых политик, но менее надежен и не поддерживает все директивы. Пример:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
Content-Security-Policy-Report-Only
Перед внедрением CSP в production, рекомендуется использовать заголовок Content-Security-Policy-Report-Only. Этот заголовок позволяет браузеру сообщать о нарушениях политики, не блокируя загрузку ресурсов. Сообщения отправляются на указанный URL (директива report-uri). Это позволяет протестировать политику и убедиться, что она не ломает функциональность сайта.
Преимущества использования CSP
- Снижение риска XSS-атак: CSP значительно усложняет эксплуатацию XSS-уязвимостей.
- Защита от внедрения вредоносного кода: Ограничивает источники, из которых можно загружать скрипты и другие ресурсы.
- Улучшение общей безопасности веб-приложения: CSP является важным компонентом многоуровневой защиты.
Content Security Policy – это важный инструмент для повышения безопасности веб-приложений. Правильная настройка CSP может значительно снизить риск атак и защитить данные пользователей. Необходимо тщательно планировать и тестировать политику CSP, чтобы избежать проблем с функциональностью сайта. Использование Content-Security-Policy-Report-Only перед внедрением в production является обязательным шагом.