BUSSOL / CONSENT MANAGER

Документация версии 2.1.0

Установка, автоматическое подключение, категории, блокировка сервисов, сканер сайта, журнал согласий, ФЗ-152, Композит и Developer API.
АвтоподключениеScannerConsent Mode v2HMAC-журналФормы · ФЗ-152Композит
Релиз: 01.10.2026 · модуль: bussol.policy2 · документ: 02.10.2026
SHA-256: 873489a9bbb092bac2b515881857313ad8c60bb27cfaf87f3553671303222119

О документе

Документ подготовлен для BUSSOL Consent Manager, модуль bussol.policy2 версии 2.1.0, на основе фактической структуры релизного архива. Он предназначен для владельца проекта, администратора 1С-Битрикс, интегратора, разработчика и специалиста, отвечающего за cookie и пользовательские согласия.

ПараметрЗначение
ПродуктBUSSOL Consent Manager
ПозиционированиеCookie Consent Manager для 1С-Битрикс — сканер сайта, блокировка сервисов, журнал согласий и ФЗ-152
ID модуляbussol.policy2
Версия2.1.0
Дата релиза01.10.2026
Контрольный SHA-256 архива873489a9bbb092bac2b515881857313ad8c60bb27cfaf87f3553671303222119
Проверенная совместимостьКомпозитный режим на готовых решениях Аспро, INTEC и Сотбит Розница — подтверждено практическими тестами владельца продукта.
Как читать документацию

Разделы 1–6 нужны для установки и запуска, 7–14 — для функциональной настройки, 15–16 — для интегратора и разработчика, 17–18 — для эксплуатации, диагностики и приёмки.

1. Назначение и модель решения

BUSSOL Consent Manager — отдельный модуль 1С-Битрикс, который автоматически подключает на публичных страницах интерфейс управления согласием, блокирует распознанные сторонние ресурсы до разрешения нужной категории, ведёт журнал действий пользователя и предоставляет административные инструменты для аудита и диагностики.

УровеньРоль в решении
АвтоподключениеОбработчик OnEndBufferContent внедряет bootstrap, consent.js и корневой контейнер без ручного IncludeComponent().
Серверный блокировщикДо отдачи HTML переводит распознанные script/iframe/img/link/object/embed/source в заблокированное состояние.
Клиентский Consent CenterShadow DOM-интерфейс: принять всё, отказаться, выбрать категории, повторно изменить решение или отозвать согласие.
Менеджер сервисовСвязывает домены, сигнатуры, cookie и типы ресурсов с категорией согласия.
Сканер сайтаSame-origin обход страниц и инвентаризация известных сторонних подключений.
Журнал и политикаConsent log, редакции политики, SHA-256 snapshot/fingerprint, HMAC-цепочка, аналитика и CSV.
Интеграция BitrixЗапись согласий через штатный UserConsent\Consent::addByContext(), административное меню, D7 ORM и события main.
Основной сценарий

Установил → включил → настроил → виджет работает. Правка header.php/footer.php и обязательное размещение компонента не требуются.

↑ К содержанию

2. Возможности версии 2.1.0

  • Срок хранения согласия и повторный запрос при изменении версии политики.
  • Кнопки «Принять все», «Отказаться», «Настроить», сохранение индивидуального выбора и отзыв согласия.
  • Произвольные категории; necessary всегда остаётся обязательной.
  • Встроенные профили сервисов: Яндекс.Метрика, Google Analytics, Google Tag Manager, VK Pixel/VK Ads, YouTube, Rutube, Vimeo, JivoSite, Calltouch, Roistat, Google reCAPTCHA, Яндекс.Карты.
  • Серверная блокировка script, iframe, img, link, object, embed, source; клиентская обработка динамических ресурсов и сетевых сценариев.
  • Перехват document.cookie для известных cookie и удаление cookie запрещённых категорий после отказа или отзыва.
  • Google Consent Mode v2: analytics_storage, ad_storage, ad_user_data, ad_personalization, functionality_storage, personalization_storage, security_storage.
  • Журнал согласий и согласий форм: пользователь, IP-режим, страна/регион, URL, User-Agent, категории, версия/редакция политики и Bitrix consent ID.
  • HMAC-связанная цепочка записей и проверка её целостности.
  • Неизменяемые снимки редакций политики с SHA-256.
  • Добавление согласия к формам по CSS-селекторам, исключения и обязательная валидация.
  • Автоподключение, многосайтовые настройки, URL-правила показа и независимые URL-правила блокировки.
  • Композит-совместимая загрузка: статический HTML содержит нейтральный loader, актуальная конфигурация запрашивается no-store.
  • Shadow DOM, accessibility, RU/EN, региональные режимы, генератор политики, Scanner, Dashboard, Diagnostics, PHP/JS API.
Важно

Модуль технически управляет загрузкой ресурсов и фиксацией согласий, но не определяет юридическую достаточность конкретного текста политики. Сформированный генератором документ необходимо проверить под реальные процессы сайта.

↑ К содержанию

3. Системные требования и совместимость

ТребованиеКомментарий
ПлатформаСамостоятельно размещённая 1С-Битрикс: Управление сайтом / коробочная установка, где разрешена установка PHP-модулей.
PHPВстроенная проверка конфигурации считает совместимым диапазон PHP 8.1–8.4; сборка 2.1.0 синтаксически проверена на PHP 8.4.
Модуль mainИспользуются публичные D7 API, EventManager, Option, ORM, UserConsent и административная инфраструктура 1С-Битрикс.
JavaScriptСовременный браузер с Shadow DOM, CustomEvent, fetch/Promise. Для старых браузеров требуется отдельная политика поддержки.
HTTPSРекомендуется. Cookie согласия получает Secure автоматически при HTTPS.
Сайты24 / LandingПоддерживается сценарий коробочной установки Bitrix Landing/Сайты24, где модуль может работать на финальном HTML. Облачный Bitrix24 не устанавливает PHP Marketplace-модули тем же способом.
Готовые решенияАрхитектура не зависит от CSS-классов конкретного шаблона; практическая стабильность с включённым Композитом проверена на Аспро, INTEC и Сотбит Розница.
Почему шаблон не должен ломать виджет

Публичный интерфейс рендерится в Shadow DOM, а сам корневой контейнер внедряется независимо от layout-классов шаблона. Для согласий форм применяются настраиваемые CSS-селекторы и отдельный namespaced-класс.

↑ К содержанию

4. Установка, обновление и удаление

Установка

Распакуйте Marketplace-пакет в /bitrix/modules/bussol.policy2/ и установите модуль через стандартный менеджер модулей 1С-Битрикс. При установке регистрируется ID bussol.policy2, создаются таблицы, события, агент очистки журнала и копируются публичные ресурсы.

Что устанавливаетсяПуть / действие
Резервный компонент/bitrix/components/bussol/policy2.widget
JS/CSS/bitrix/js/bussol.policy2
Публичные endpoints/bitrix/tools/bussol.policy2
Административные прокси/bitrix/admin/bussol.policy2_*.php
Иконка меню/bitrix/themes/.default/icons/bussol.policy2/icon_policy.png
СобытияOnBuildGlobalMenu и OnEndBufferContent
Агент\Bussol\Policy2\LogCleaner::run(); раз в 86400 секунд

Обновление с 2.0.0

Migration::install() создаёт недостающие таблицы и добавляет новые поля в b_bussol_policy2_consent без удаления существующих строк. Миграция содержит ветки для MySQL-family, PostgreSQL и SQLite при добавлении колонок.

Удаление

При удалении можно сохранить данные. Если параметр savedata=Y, таблицы и опции не удаляются. При полном удалении удаляются таблицы consent/revision/scan, файлы, события, агент и настройки модуля.

Перед обновлением

Сделайте резервную копию базы и каталога /bitrix/modules/bussol.policy2, а после обновления откройте «Диагностика» и проверьте живое автоподключение, JS, config endpoint и целостность журнала.

↑ К содержанию

5. Быстрый запуск и автоматическое подключение

Автоматический вывод — основной и рекомендуемый режим. После установки для каждого нужного сайта оставьте включёнными «Модуль включён» и «Автоматически подключать Consent Manager». Обработчик OnEndBufferContent выполняется на итоговом HTML публичной страницы.

ШагДействие
1Открыть BUSSOL → Consent Manager → Настройки и выбрать SITE_ID.
2Проверить ENABLED=Y и AUTO_INJECT=Y.
3Настроить срок согласия, тексты, категории, сервисы и политику.
4Сохранить. Создаётся редакция политики; выполняется очистка Static HTML Cache и BXClearCache.
5Открыть Диагностику и дождаться статусов «Виджет обнаружен», «JS загружен», «Конфигурация получена».

В head внедряются bootstrap и /bitrix/js/bussol.policy2/consent.js?v=2.1.0, а перед </body> — <div id="bussol-policy2-root" data-bussol-policy2-root></div>. Актуальная конфигурация загружается из /bitrix/tools/bussol.policy2/config.php?site_id=... с Cache-Control: no-store.

// Ручной компонент нужен только как резервный режим
$APPLICATION->IncludeComponent('bussol:policy2.widget', '', []);
Результат

В обычной эксплуатации компонент вручную размещать не нужно. Если AUTO_INJECT=N, можно использовать резервный компонент.

↑ К содержанию

6. Административный центр и многосайтовость

ЭкранНазначение
ОбзорСогласия за 30 дней, согласия форм, accept_all/reject/withdraw, статус проверки конфигурации и быстрые действия.
НастройкиОсновное, категории, сервисы, формы, приватность/регионы, политика и Developer API.
Сканер сайтаSame-origin аудит сторонних сервисов и сохранение находок.
Журнал и аналитикаФильтрация записей, статистика, CSV-экспорт.
ДиагностикаСерверные проверки, HMAC verify и живая проверка публичной страницы.

Настройки хранятся в Bitrix Option с привязкой к SITE_ID. При установке дефолты создаются для активных сайтов. В каждом административном разделе можно работать с выбранным сайтом.

Ключевые настройки по умолчанию

ПараметрЗначение по умолчанию
ENABLED / AUTO_INJECTY / Y
POSITIONbottom
SHOW_DELAY250 мс
CONSENT_DAYS365 дней
POLICY_VERSION2.1.0
SHOW_REOPENY
STRICT_COOKIE_BLOCKING / DYNAMIC_BLOCKINGY / Y
LOG_RETENTION_DAYS730 дней
IP_MODEmask
CONSENT_MODE_ENABLEDY
SCANNER_MAX_PAGES / SCANNER_TIMEOUT20 страниц / 8 секунд
LOCALE_MODE / LOCALE_DEFAULTauto / ru

↑ К содержанию

7. Категории, баннер и Consent Center

Категории не зашиты в публичный интерфейс. Администратор может создавать собственные коды, названия, описания, обязательность, включённость и сортировку. Код necessary всегда считается обязательным и восстанавливается, если его случайно удалить из конфигурации.

Категория по умолчаниюНазначениеОбязательная
necessaryБазовая работа сайтаДа
functionalПредпочтения и дополнительные функцииНет
analyticsИзмерение посещаемости и улучшение сайтаНет
marketingРеклама, ретаргетинг и встраиваемый контентНет

Пользователь может принять всё, отказаться от необязательных категорий, открыть подробные настройки, сохранить индивидуальный выбор и позднее повторно открыть центр управления. При withdraw cookie BUSSOL_POLICY2_CONSENT удаляется, а модуль очищает известные cookie запрещённых категорий.

Cookie согласия

ПараметрРеализация
ИмяBUSSOL_POLICY2_CONSENT
СрокCONSENT_DAYS, минимум 1 день
Path/
SameSiteLax
SecureАвтоматически на HTTPS
HttpOnlyНет, поскольку состояние читается клиентским Consent Center
Повторное согласиеЕсли policy в cookie не равен текущей POLICY_VERSION, старое состояние не принимается.

↑ К содержанию

8. Менеджер сторонних сервисов и блокировка ресурсов

Профиль сервиса связывает код сервиса с категорией, доменами, сигнатурами, cookie и допустимыми типами ресурсов. Одни и те же правила используют серверный блокировщик, клиентский блокировщик и сканер.

Встроенный профильКатегория по умолчанию
Яндекс.Метрикаanalytics
Google Analyticsanalytics
Google Tag Manageranalytics
VK Pixel / VK Adsmarketing
YouTubemarketing
Rutubemarketing
Vimeomarketing
JivoSitefunctional
Calltouchanalytics
Roistatanalytics
Google reCAPTCHAfunctional
Яндекс.Картыfunctional

Серверная блокировка

ContentBlocker обрабатывает script, iframe, img, link, object, embed и source. Для script тип меняется на text/plain, исходные src/type сохраняются в data-bussol-*; для iframe/object/embed используется about:blank, для изображений/source — прозрачный placeholder. После разрешения категории клиентский код восстанавливает ресурс.

<script data-bussol-category="analytics" src="/custom-analytics.js"></script>
<iframe data-bussol-category="marketing" src="https://example.com/embed"></iframe>

<!-- Полное исключение из обработки -->
<script data-bussol-skip src="/must-run.js"></script>

Cookie и динамические ресурсы

При STRICT_COOKIE_BLOCKING=Y модуль пытается перехватить document.cookie и не записывать cookie, сопоставленные с запрещённой категорией. Purge удаляет известные cookie запрещённых категорий. MutationObserver и сетевые guards предназначены для поздно добавленных ресурсов и известных fetch/XHR/sendBeacon сценариев.

Граница автоматизации

Автоматическая блокировка основана на доменах/сигнатурах/явной data-bussol-разметке. Обфусцированный код, проксирование через собственный домен или нетипичная загрузка могут потребовать пользовательского профиля сервиса или интеграции через API.

↑ К содержанию

9. Google Consent Mode v2

При включённом CONSENT_MODE_ENABLED модуль до получения согласия устанавливает default-состояние denied для аналитических/рекламных/функциональных параметров и granted для security_storage. После выбора пользователя выполняется consent update.

Consent Mode параметрКатегория BUSSOL
analytics_storageanalytics
ad_storagemarketing
ad_user_datamarketing
ad_personalizationmarketing
functionality_storagefunctional
personalization_storagefunctional
security_storageвсегда granted

Дополнительные настройки: wait_for_update (по умолчанию 500 мс), url_passthrough и ads_data_redaction. Событие consentModeUpdated отправляется после обновления состояния.

Рекомендация

Если GTM устанавливается через модуль, убедитесь, что его профиль относится к правильной категории и что сам контейнер не внедряется раньше BUSSOL Consent Manager альтернативным кодом шаблона.

↑ К содержанию

10. Автоматический сканер сайта

Scanner выполняет ограниченный same-origin обход. Он не является удалённым vulnerability scanner: задача — инвентаризация подключений для настройки Consent Manager.

ПараметрПоведение
Стартовый URLПолный http/https URL текущего сайта.
Граница обходаТолько тот же origin.
Лимит1–50 страниц; настройка по умолчанию 20.
TimeoutSCANNER_TIMEOUT, по умолчанию 8 секунд.
Исключаемые ссылкиmailto:, tel:, javascript:, якоря, а также типичные файлы jpg/png/svg/pdf/zip/css/js/xml.
Что ищетсяscript/iframe/img/link/object/embed/source и inline-сигнатуры известных сервисов.
Хранениеb_bussol_policy2_scan: run ID, URL страницы, тип ресурса, сервис, категория, URL ресурса, evidence, статус.

По завершении сохраняются SCANNER_LAST_RUN и SCANNER_LAST_SUMMARY. На административном экране результаты можно использовать как аудит покрытия сервисов.

Техническое примечание к текущей сборке

В Scanner 2.1.0 User-Agent всё ещё содержит строку BUSSOL-Policy2-Scanner/3.0. На функциональность это не влияет, но перед публикацией следующей сборки строку желательно привести к 2.1.0.

↑ К содержанию

11. Журнал согласий, аналитика, IP и целостность

Каждое решение пользователя сохраняется в b_bussol_policy2_consent. Согласия форм пишутся в ту же таблицу с EVENT_TYPE=form, что позволяет централизовать историю.

Поле / группаЧто хранится
ИдентификацияSITE_ID, CONSENT_UID, USER_ID
СобытиеEVENT_TYPE, DECISION, CATEGORIES
Сеть и регионIP, COUNTRY, REGION
ПолитикаPOLICY_VERSION, POLICY_REVISION_ID, POLICY_HASH, POLICY_SNAPSHOT
BitrixBITRIX_CONSENT_ID
КонтекстURL, USER_AGENT, META_JSON, DATE_CREATE
ЦелостностьPREV_HASH, ENTRY_HASH

Режимы IP

РежимПоведение
noneIP не сохраняется.
maskIPv4 обнуляет последний октет; IPv6 сохраняет первые 64 бита. Режим по умолчанию.
hashHMAC-SHA256 от IP с секретом сайта.
fullСохраняется полный IP.

Proxy-заголовки игнорируются по умолчанию. При IP_TRUST_PROXY=Y рассматриваются только перечисленные IP_TRUSTED_HEADERS. Это снижает риск доверия произвольному X-Forwarded-For.

HMAC-цепочка

SecureLog берёт ENTRY_HASH предыдущей записи (для первой — GENESIS), канонизирует ключевые поля и вычисляет HMAC-SHA256 с сайто-специфичным секретом. Diagnostics может проверить последовательность и указать ID нарушенных записей.

Аналитика и экспорт

Dashboard и LogAnalytics считают total, consent, form, accept_all, reject, custom, withdraw и распределение разрешённых категорий за выбранный период. CSV-экспорт ограничен 50 000 строками за один вызов и использует разделитель «;» с UTF-8 BOM.

Удаление старых записей и HMAC

Агент удаляет записи старше LOG_RETENTION_DAYS. После удаления начала цепочки проверка оставшейся последовательности продолжает работать относительно первого доступного PREV_HASH, но архивную доказательность за удалённый период следует обеспечивать отдельным регламентом экспорта/хранения.

↑ К содержанию

12. Политика, версии, генератор и UserConsent

При каждом сохранении настроек PolicyRevisionManager создаёт forced snapshot. В редакцию входят версия, HTML политики, категории, сервисы, срок согласия, региональный режим и флаг согласия форм. SHA-256 считается от JSON снимка.

СущностьНазначение
POLICY_VERSIONЛогическая версия политики; также входит в подписанный публичный token и используется для re-consent.
b_bussol_policy2_revisionНеизменяемые редакции с HASH, POLICY_HTML, CATEGORIES_JSON, SERVICES_JSON и CONFIG_JSON.
POLICY_HASH / POLICY_SNAPSHOT в журналеСвязывают конкретное решение пользователя с редакцией, которую видел сайт в тот момент.
BITRIX_AGREEMENT_IDШтатное соглашение Bitrix для cookie consent.
FORM_AGREEMENT_IDОтдельное штатное соглашение Bitrix для форм.

Генератор политики

PolicyGenerator использует оператора, реквизиты, контакт, дату вступления в силу, цели, фактические категории и активные сервисы. В текст включаются таблицы категорий/сервисов, управление выбором, срок хранения, режим IP и описание защищённого журнала.

Юридическое ограничение

Генератор создаёт технический шаблон. Он не является юридическим заключением и не подтверждает соответствие конкретного сайта ФЗ-152, GDPR или иным требованиям без проверки фактических процессов и документов.

↑ К содержанию

13. Согласия для форм, региональные режимы, URL-правила и локализация

Согласия для форм

При FORM_CONSENT_ENABLED=Y клиентский код ищет формы по FORM_SELECTORS (по умолчанию form), исключает FORM_EXCLUDE_SELECTORS (#bx-panel form,.b24-form form), добавляет checkbox перед submit или в конец формы и может запрещать submit до отметки.

При успешной отправке согласия в журнал передаются CSS selector формы, action, form ID и список имён полей. Значения самих полей модуль не отправляет в payload журнала форм.

Региональные режимы

RegionResolver читает Cloudflare/GeoIP-подобные заголовки или пользовательский event bussol.policy2:OnResolveCountry. EU/EEA определяется по настраиваемому списку ISO-кодов; дополнительные правила задаются JSON, а REGION_BEHAVIOR_JSON определяет mode и preselected категории для региона.

URL-правила

URL_INCLUDE/URL_EXCLUDE управляют показом виджета. BLOCK_URL_INCLUDE/BLOCK_URL_EXCLUDE отдельно управляют серверной блокировкой ресурсов. Поддерживаются маски * и ?. Исключения проверяются раньше включений.

Локализация

Публичный UI поддерживает ru/en. В auto-режиме используется LANGUAGE_ID; неизвестный язык откатывается к ru. LOCALE_TRANSLATIONS_JSON позволяет переопределять отдельные строки без правки consent.js.

↑ К содержанию

14. Accessibility, Shadow DOM, Композит, Сайты24 и шаблоны

Accessibility

  • role="dialog", aria-modal, aria-labelledby и aria-label на интерактивных элементах.
  • Focus trap внутри модального Consent Center и возврат фокуса после закрытия.
  • Управление Escape, видимый :focus-visible, role=alert для ошибки обязательного согласия формы.
  • prefers-reduced-motion отключает анимации/переходы.

Shadow DOM

Корневой контейнер #bussol-policy2-root создаёт open ShadowRoot и собственные стили. Это минимизирует влияние Bootstrap, глобальных селекторов готового решения и пользовательских CSS.

Композит

Для композитных страниц в статическом HTML остаются нейтральный bootstrap/loader и уже заблокированная сервером разметка сторонних ресурсов. Актуальные настройки consent загружаются отдельным no-store запросом. После сохранения настроек модуль очищает Static HTML Cache.

Практически проверенные решения

РешениеРезультат теста
АспроСтабильная работа BUSSOL Consent Manager при включённом Композите.
INTECСтабильная работа при включённом Композите.
Сотбит РозницаСтабильная работа при включённом Композите.
Корректная формулировка совместимости

Модуль не привязан к структуре перечисленных шаблонов. Тесты подтверждают совместимость с ними, но неизвестный кастомный код, CSP, HTML-минимизаторы и нестандартные прокси всегда следует проверять на staging.

↑ К содержанию

15. Developer API и события

JavaScript API

BussolPolicy2.on('change', handler);
BussolPolicy2.open();
BussolPolicy2.acceptAll();
BussolPolicy2.rejectAll();
BussolPolicy2.withdraw();
BussolPolicy2.getConsent();
BussolPolicy2.hasConsent('analytics');
BussolPolicy2.setCookie('name', 'value', { category: 'functional' });
BussolPolicy2.deleteCookie('name');
BussolPolicy2.registerScript({ category: 'analytics', src: 'https://example/script.js' });
BussolPolicy2.registerResource({ type: 'iframe', category: 'marketing', url: 'https://example/embed' });
BussolPolicy2.getConfig();
BussolPolicy2.getRegion();
BussolPolicy2.getCategories();
BussolPolicy2.getServices();
BussolPolicy2.purgeCookies();

События

Внутренние listener-события дублируются как DOM CustomEvent bussol.policy2:<event> и, если доступен BX.Event.EventEmitter, как Bussol.Policy2:<event>. Основные: ready, open, change, withdraw, resourceBlocked, cookieBlocked, cookieDeleted, consentModeUpdated, formConsent.

PHP API

\Bussol\Policy2\Api::getCurrentConsent();
\Bussol\Policy2\Api::hasConsent('analytics');
\Bussol\Policy2\Api::getCategories();
\Bussol\Policy2\Api::getServices();
\Bussol\Policy2\Api::getRegion();
\Bussol\Policy2\Api::getPolicyRevision();
\Bussol\Policy2\Api::shouldShowOnUrl('/catalog/item/');

Расширение геолокации

// Подпишитесь на событие модуля bussol.policy2:OnResolveCountry
// и верните в параметрах результата: ['country' => 'DE']
О точке расширения сервисов

Метод Api::registerServiceMatcher() в текущей сборке оставлен как декларативная точка расширения с комментарием, но сам вызов ничего не регистрирует. Для рабочих интеграций используйте ServiceManager/настройки профиля или собственную подписку/обвязку.

↑ К содержанию

16. Хранилище, endpoints и безопасность

Таблицы

ТаблицаНазначение
b_bussol_policy2_consentConsent/form log и HMAC chain.
b_bussol_policy2_revisionРедакции политики и конфигурационные snapshots.
b_bussol_policy2_scanРезультаты запусков Scanner.

Публичные endpoints

EndpointМетод / защитаНазначение
/bitrix/tools/bussol.policy2/config.phpGET, no-store, проверка SITE_IDПубличная конфигурация виджета.
/bitrix/tools/bussol.policy2/consent.phpPOST JSON, Bitrix Signer tokenСохранение cookie-consent и журнала.
/bitrix/tools/bussol.policy2/form.phpPOST JSON, Bitrix Signer tokenЖурналирование согласия формы.
/bitrix/tools/bussol.policy2/diagnostics.phpGET, только авторизованный администратор + DIAGNOSTICS_ENABLEDПубличный debug payload для диагностической панели.

Token подписывает строку siteId|POLICY_VERSION с использованием Bitrix Signer и COOKIE_NAME в качестве salt. При смене POLICY_VERSION старый token считается stale.

HTML политики перед вставкой в Consent Center проходит клиентскую санитаризацию: удаляются script/iframe/object/embed/form/input/button, обработчики on* и опасные javascript:/data:text/html атрибуты.

CSP и нестандартные security headers

Если проект использует строгую Content-Security-Policy, nonce/hash требования или внешнюю WAF-обвязку, разрешите собственные ресурсы /bitrix/js/bussol.policy2 и /bitrix/tools/bussol.policy2 либо адаптируйте политику CSP под архитектуру проекта.

↑ К содержанию

17. Диагностика и типовые проблемы

СимптомЧто проверить
Виджет не появилсяENABLED/AUTO_INJECT, URL_INCLUDE/EXCLUDE, наличие </html>, отсутствие административного пути /bitrix/ или /local/, композитный кэш.
Диагностика: JS не загруженФайл /bitrix/js/bussol.policy2/consent.js, права, веб-сервер, CDN/WAF, CSP.
Config endpoint не отвечает/bitrix/tools/bussol.policy2/config.php, SITE_ID, загрузку модуля main/bussol.policy2, кеширование прокси.
Сервис выполняется до согласияПроверьте профиль сервиса, домен/сигнатуру, тип ресурса, альтернативную вставку кода и data-bussol-skip.
Cookie не удаляетсяCookie может быть HttpOnly, иметь недоступный domain/path или устанавливаться сервером; browser JS не способен удалить любой cookie.
Форма перестала отправлятьсяFORM_SELECTORS/EXCLUDE, обязательность, AJAX-перерисовку формы, custom submit listeners.
Нарушение HMAC-цепочкиРучные изменения строк БД, перенос части таблицы, изменение секретного LOG_HMAC_SECRET или некорректная внешняя очистка.
Сканер не видит сервисСервис создаётся только после JS execution, использует собственный proxy-domain или сигнатуры отсутствуют в профиле.
Живая проверка недоступнаВыбранный SITE_ID настроен на другой SERVER_NAME — откройте админку на соответствующем домене или проверьте вручную.

Расширенная публичная диагностика

Если DIAGNOSTICS_ENABLED=Y, администратор может открыть публичную страницу с GET-параметром, имя которого задаёт ADMIN_DEBUG_QUERY (по умолчанию bussol_policy2_debug), и значением Y. Модуль покажет debug-панель только авторизованному администратору.

Техническое примечание к текущей сборке

В lib/helper/menu.php title административного пункта содержит строку «BUSSOL Consent Manager 3.0». Это косметическое несоответствие версии 2.1.0 и не меняет MODULE_VERSION; рекомендуется исправить в следующем пакете.

↑ К содержанию

18. Чек-лист приёмки и эксплуатационные ограничения

Чек-лист перед production

  • Создана резервная копия; обновление 2.0.0 → 2.1.0 проверено на staging.
  • Для каждого SITE_ID проверены ENABLED, AUTO_INJECT, тексты, срок согласия и POLICY_VERSION.
  • Категории отражают фактическую модель сайта; necessary содержит только действительно обязательные функции.
  • Scanner пройден по ключевым разделам; все найденные сервисы назначены правильным категориям.
  • Реальные Метрика/GA/GTM/VK/видео/карты проверены до и после согласия в Network/Application DevTools.
  • Отказ и withdraw удаляют доступные cookie запрещённых категорий и прекращают дальнейшую загрузку сервисов.
  • Consent Mode v2 проверен через dataLayer/gtag и GTM Preview, если Google-экосистема используется.
  • Журнал фиксирует accept/reject/custom/withdraw; HMAC verify возвращает valid.
  • Policy snapshot/hash меняется после редактирования политики/категорий/сервисов.
  • Формы проверены в обычной и AJAX-версии; исключения для системных форм настроены.
  • Многосайтовость, RU/EN, регионы и URL-правила проверены на нужных доменах.
  • Композит включён и повторно проверен после очистки Static HTML Cache.
  • Диагностика показывает: автоподключение активно, виджет обнаружен, JS загружен, конфигурация получена.

Эксплуатационные ограничения

  • Нельзя гарантировать удаление HttpOnly или недоступных по domain/path cookie средствами браузерного JavaScript.
  • Regex/сигнатурная блокировка требует актуальных профилей сервисов; новые домены и нестандартные интеграции нужно добавлять вручную.
  • Сканер анализирует загруженный HTML, но не является полноценным headless-browser crawler и не выполняет все пользовательские сценарии JavaScript.
  • Генератор политики — технический шаблон, а не юридическая экспертиза.
  • Неизвестный кастомный код, WAF, CDN, CSP, модификаторы HTML и нестандартные композитные механизмы требуют отдельного теста на staging.
Готовность к запуску

Считайте внедрение принятым после сквозного сценария: первый визит без consent → проверка отсутствия запрещённых сервисов → accept/custom/reject → повторный визит → изменение выбора → withdraw → проверка журнала, политики, форм и диагностики.

↑ К содержанию