Настройка Content Security Policy для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка Content Security Policy для 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка 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 часов в зависимости от числа сторонних сервисов на сайте.