Настройка Content Security Policy для 1С-Битрикс
CSP — заголовок, который указывает браузеру, с каких источников допустима загрузка ресурсов. Для Битрикс-сайтов настройка нетривиальна: ядро, компоненты и сторонние виджеты (метрики, чаты, платёжные формы) используют десятки различных доменов, и неправильный CSP либо не работает, либо ломает функционал.
Как внедрить CSP в Битрикс
Заголовок добавляется на уровне веб-сервера или в коде. Предпочтительно — в nginx:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.google-analytics.com; img-src 'self' data: https:; style-src 'self' 'unsafe-inline';" always;
Альтернатива — в init.php через \Bitrix\Main\Context::getCurrent()->getResponse()->addHeader(), но тогда заголовок не применяется к статике.
Анализ необходимых источников
Перед написанием политики — режим Content-Security-Policy-Report-Only:
add_header Content-Security-Policy-Report-Only "default-src 'self'; report-uri /csp-report-endpoint" always;
Браузер будет логировать нарушения, не блокируя их. Анализируйте консоль devtools несколько дней, собирая все домены, которые используют компоненты.
Типичные источники для Битрикс-сайта:
-
'unsafe-inline'дляscript-src— почти неизбежно из-за встроенных скриптов Битрикс -
https://mc.yandex.ru— Яндекс.Метрика -
https://www.google-analytics.com,https://www.googletagmanager.com— GTM/GA -
https://pay.alfabank.ru,https://securepay.tinkoff.ru— платёжные системы (для frame-src) -
https://widget.jivosite.com— Jivo и аналоги (для frame-src, connect-src)
Ограничения из-за inline-кода
Битрикс активно использует onclick и <script> без nonce — это конфликтует с script-src 'self' без 'unsafe-inline'. Полное удаление 'unsafe-inline' требует рефакторинга шаблонов и компонентов для добавления nonce.
Компромисс: применяйте строгий CSP хотя бы к frame-src, object-src, base-uri — они дают наибольший защитный эффект при минимальных конфликтах:
Content-Security-Policy: frame-ancestors 'self'; object-src 'none'; base-uri 'self';
Случай из практики
B2C-магазин с встроенным онлайн-чатом и платёжной формой в iframe. После включения CSP перестала открываться форма оплаты через Тинькофф — iframe блокировался директивой frame-src 'self'. Платёжный домен securepay.tinkoff.ru не был добавлен в политику. Дополнительно: Яндекс.Метрика переставала записывать вебвизор (блокировался WebSocket к mc.yandex.ru). Решение: добавление всех доменов в соответствующие директивы через режим Report-Only, затем применение строгой политики.
Сроки выполнения
Разработка и внедрение CSP с предварительным аудитом в Report-Only режиме — от 4 до 8 часов в зависимости от числа сторонних сервисов на сайте.







