Перейти к содержимому
Эльдар Шахвалиев
Обсудить проект
← Все проекты
202605.2026 — presentВ работеполный цикл

Cookie-консент и 152-ФЗ на потоке (зонтичный кейс, 6 сайтов)

6 коммерческих сайтов разных заказчиков (детские/мед-услуги, ивенты/выпускные, инвестиции, домофоны/ЖКХ, свадебное агентство) · Малый и средний бизнес РФ; комплаенс по обработке персональных данных (152-ФЗ)

Fullstack-инженер: разработка типового плагина, аудит, интеграция и деплой на сайтах заказчиков, юридический контент по 152-ФЗ

Шесть заказчиков попросили одно и то же — уведомление о cookie, политики, галочки согласия. Сделал типовое решение, а не шесть разных.

  • PHP
  • WordPress
  • Bitrix
  • JavaScript
  • CSS/SCSS
  • MySQL
  • REST API
  • ACF/SCF
  • Contact Form 7
  • Elementor/WPBakery
  • VPS
  • SSH/wp-cli

Ссылки и доступ — по запросу.

6
сайтов заказчиков в зонтичном проекте (4 live/сданы, 1 на финализации, 1 в планировании)
v1.0.8, 18 файлов, ~128 KB
собственный плагин cookie-consent-shim, переиспользуется без правок
3.6 KB / 1.8 KB
gzip-размер JS / CSS баннера (бюджет производительности)
17
этапов реализации на Bitrix-сайте invest-kbr.ru (RU+EN)
56
правок в БД при миграции idealgraduation.ru на HTTPS (wp search-replace)
4
категории cookie (necessary/functional/analytics/marketing) + публичный JS-API window.cookieConsent
  • Написал собственное расширение и переиспользую его между сайтами без правок: меняются только оформление и юридические тексты.
  • Уведомление весит 3,6 КБ кода и 1,8 КБ оформления в сжатом виде: требование закона не должно стоить сайту скорости.
  • Журнал согласий хранит не сами данные посетителя, а их необратимые отпечатки: подтвердить факт согласия можно, восстановить данные — нет.
  • Перенёс то же решение на принципиально другой движок, с двумя языками — значит подход не привязан к одной платформе.
  • Юридические тексты писал со сверкой норм на дату работ и без несуществующих ссылок, которые кочуют по шаблонам из интернета.

Задача

Несколько разных заказчиков попросили одно и то же: уведомление о файлах cookie в стиле своего сайта, страницы политик, галочки согласия во всех формах и страницу с реквизитами оператора персональных данных. Требование общее — соответствие закону, штрафы по которому в последние годы заметно выросли.

Разными были только сайты: другие движки, другие темы, другой стиль. Делать шесть раз с нуля означало потратить в шесть раз больше времени и получить шесть разных решений, которые дальше поддерживать по отдельности.

Что сделано

  • Написал собственное расширение и переиспользую его между сайтами без правок в коде: уведомление, центр настроек с четырьмя категориями, страницы документов, галочки в формах. От сайта к сайту меняются оформление и юридические тексты, а не механика.
  • Заложил журнал согласий: фиксируется факт согласия по каждой форме, но вместо самих данных посетителя хранятся их необратимые отпечатки. Подтвердить согласие при проверке можно, восстановить персональные данные из журнала нельзя.
  • Уложился в бюджет по весу: 3,6 КБ кода и 1,8 КБ оформления в сжатом виде. Требование закона не должно стоить сайту скорости, иначе его начинают саботировать.
  • Перенёс то же решение на принципиально другой движок — со своим компонентом, своим журналом согласий и двумя языками. Подход оказался не привязан к одной платформе.
  • Выработал приём подключения, не требующий менять тему сайта: он работает и с блочными темами, и с классическими, и обновление темы его не сотрёт.
  • Написал юридические тексты под каждую отрасль, сверяя нормы на дату работ и отказываясь от несуществующих ссылок, которые кочуют по шаблонам из интернета.

Итог

Комплект работает на шести сайтах разных заказчиков: четыре сданы и живут, один на финальной проверке, один в планировании. Каждый следующий сайт обходится дешевле предыдущего — расширение переиспользуется без правок, отличаются только оформление и тексты.

Уведомление занимает 3,6 КБ кода и 1,8 КБ оформления в сжатом виде, то есть соответствие закону не отражается на скорости сайта. Факт согласия по каждой форме фиксируется в журнале, но восстановить из него персональные данные невозможно.

Решение перенесено и на принципиально другой движок, с двумя языками, — значит подход применим и к следующему заказчику, каким бы ни был его сайт.

Технические детали

Решение и подход

Ядро — плагин cookie-consent-shim (PHP, namespace CCS, GPL-2.0): singleton-bootstrap, installer (таблицы/опции), frontend (рендер баннера, enqueue), REST-эндпоинт для кастомных форм, admin (настройки + журнал), CRUD журнала согласий, интеграция CF7, шорткоды. Баннер рендерится на клиенте (совместимость с full-page кэшами). Публичный JS-API window.cookieConsent (get/getAll/isAccepted/open/reset/setAll/getMeta) + CustomEvent'ы cookieConsent:ready/change/withdraw/open/close — стабильный контракт, чтобы код заказчика по реальной блокировке не ломался между релизами. Журнал согласий по формам хранит timestamp, версию политики, HMAC-хеш IP/UA. Страница «Реквизиты ПДн» работает на ACF Pro Options Page, а при отсутствии ACF — на нативном Settings API с совместимыми ключами хранения; шорткод [legal field="."] читает оба источника (приоритет ACF → native → default).

Ключевые инженерные решения, выработанные как переиспользуемые паттерны (источник: HANDOFF.md, progress.md):

  • Per-site override через mu-plugin (wp_add_inline_style + хук wp_footer), а не child-тему — изолирует код, не меняет body-class, не вызывает регрессий рендера; child-тема допустима только для FSE-тем.
  • Для классических тем без template part — рендер триггера в wp_footer + inline-JS перемещает блок в нужный контейнер футера после DOM-ready.
  • Управление z-index и перехватом кликов сторонних floating-виджетов через CSS-переменные плагина и точечные override.
  • Backup post_content в meta перед каждой правкой Gutenberg-блоков; правка через strpos/substr или WP API, без жадных regex.

На Bitrix то же решение реализовано средствами платформы: миграционные скрипты создают инфоблок и HL-блок, компонент выводит баннер, журнал согласий пишется в HL-блок, формы дорабатываются через API форм Bitrix — то есть единая концепция 152-ФЗ перенесена на другой CMS-стек.

Стек и обоснование

  • PHP / WordPress (плагин + mu-plugins + child-themes) — основной стек заказчиков; плагин как переиспользуемое ядро снижает стоимость каждого нового сайта.
  • PHP / Bitrix (компоненты, инфоблоки, HL-блоки, API форм) — для invest-kbr.ru, где WordPress-плагин неприменим; то же решение нативными средствами платформы.
  • JavaScript (vanilla) — клиентский рендер баннера и публичный JS-API без зависимостей, чтобы не раздувать LCP/CLS и работать поверх любых кэшей.
  • Contact Form 7, ACF/SCF — стандарт форм и кастомных полей в экосистеме заказчиков; реализован fallback на нативный Settings API, чтобы не требовать ACF Pro.
  • MySQL, REST API — журнал согласий и эндпоинт для кастомных форм.
  • SSH / wp-cli, VPS/shared-хостинги (reg.ru, beget, Timeweb) — аудит и деплой; учтены ограничения shared-хостинга (установка wp-cli phar в ~/.local/bin, fail2ban-окна, отсутствие глобального wp-cli).

Инженерные вызовы

  • Один функционал, три архитектуры тем WordPress (две FSE + одна классическая) и четвёртый стек (Bitrix) — потребовалось выработать платформо-специфичные паттерны интеграции, сохранив единое ядро.
  • CF7-acceptance под Popup Maker (kidlife05) — 5 итераций фиксов ширины <label> через двухслойный CSS-override; результат вынесен в base-CSS плагина, на следующих сайтах работает из коробки.
  • Темы с <button type="submit"> вместо CF7 [submit] (idealgraduation) — helper ищет оба варианта как якорь вставки.
  • Безопасный деплой на shared-хостингах: dry-run search-replace, контроль целостности файлов (sha256/md5) после rsync, backup post_content в meta, проверка php -l/base64 -d перед запуском на проде, учёт fail2ban-окон.
  • Bitrix: работа с БД в кодировке latin1, миграционные скрипты для инфоблоков/HL-блоков, двуязычность RU+EN, бэкап с поэлементной sha256-сверкой (11/11) перед стартом.
  • Юридическая корректность: каждое нормативное утверждение со ссылкой на источник; обнаружены и исправлены некорректные отсылки в исходных материалах.
  • разработка
  • доработка существующего
  • аудит
  • миграция
  • деплой
  • 152-ФЗ/ПДн
  • контент