Налаштування 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 годин залежно від кількості сторонніх сервісів на сайті.







