Гейзенбаг и самооборона: Как проактивная защита Битрикса может заблокировать сам себя
💡 Гейзенбаг (Heisenbug) — это такой баг, который исчезает или меняет поведение, как только ты пытаешься его исследовать. Смотришь — и он уже ведёт себя по-другому. Почти как квантовая частица 🧙♂️

Иногда проект начинает жить своей жизнью. Ошибки появляются, но никто их не видит. Логи молчат, нагрузка в норме, а фронт впадает в кому. Мы как раз про такую ситуацию — реальная история охоты на гейзенбага 👇
Ситуация вымышленная, все совпадения случайны (ну почти).
На входе: корпоративный сайт на Битриксе, который отдаёт API. Фронт — на Vue 3 / Nuxt.
Симптомы: периодически, в разное время, часть фронта просто перестаёт работать, а в браузере — ошибка: Nuxt не работает.
Примерно через 20–60 минут всё само «оживает» и продолжает работать как ни в чём не бывало.
Что говорят логи?
🔍 pm2 — пусто (есть варнинги, но не критичные)
📄 nginx — чисто
🐘 php — молчит
🧱 Битрикс — почти ничего, а что есть — не страшно
🖥 Нагрузка на сервер — не выше 20%
💽 Жёсткие диски — расслаблены, курят бамбук
Мы прыгали с бубном вокруг сервера, но:
— эмуляция нагрузки не даёт сбоя
— API отвечает
— тестовый стенд работает как часы
Железо и нагрузка тут не при чём.
Так мы жили пару месяцев, перебирав все мыслимые и немыслимые варианты 🧠
Пока однажды...
В access.log заметили, что часть трафика отбраковывается с ошибкой 403 ❌
Причина — попытка инъекции вредоносного кода. С одной стороны — хорошо: злоумышленник не пробрался 👮♂️
С другой — странно. Кто именно блокирует?
Выяснилось: проактивный фильтр Битрикса.
Стало интересно. Копаем глубже ⛏️
Симулируем атаку: подставляем «вредный» код в URL и… ловим бан от Битрикса.
Фронт частично перестаёт работать. Вот оно! 🧩
Ключевое слово — частично.
Nuxt всё ещё может отдавать пререндеренные страницы, но при любом запросе к API — ошибка.
Например, с главной всё работает, а если обновить страницу — бах, и ошибка.
Но и это ещё не всё. Поскольку фронт и бэкенд живут на одной машине, они общаются через 127.0.0.1 и IP сервера.
Проактивный фильтр не различает, кто есть кто — и блокирует весь IP, включая самого себя.
🚫 Вуаля: фронт частично недоступен, API под блоком.
🔥 Причём инициатором бана оказался... он сам 🤦
P.S.
Решение «сложить фронт и бэкенд на один сервер и один домен» — не наше, так что не кидайтесь тапками 👟
Вывод:
Если фронт начинает вести себя странно, а логи делают вид, что ничего не происходит — копайте в неожиданное. Проактивная защита — это круто, но ни когда она душит проект который защищает.