# Адресного предохранителя у отладочного входа нет: держит его умолчание, а не машина - **Дата:** 2026-08-23 - **Источник:** [../../openspec/changes/archive/2026-08-23-config-test-headers-login/design.md](../../openspec/changes/archive/2026-08-23-config-test-headers-login/design.md), решение 4 ## Решение Отладочная подстановка заголовков входа не требует от настроек ничего сверх самого предохранителя `[server] debug`. Решение владельца на чекпоинте записано в источнике дословно: > «предохранитель по адресам не делаем, полагаемся только на параметр debug». Рассматривалось требование, чтобы при включённом предохранителе перечень доверенных адресов состоял только из петлевых записей; оно снято вместе с предикатом «петлевая запись», который заводился ровно ради него. Согласованность с барьером узнавания при этом остаётся: подставленный заголовок проходит тот же перечень доверенных адресов, что и пришедший, и судит адрес та же функция. Предохранителем это не служит — «от конфига она не требует ничего и круга тех, кто мог назваться кем угодно, не расширяет». ## Почему Решение покупает работоспособность отладочного входа там, где адрес пира не петлевой: > отладочный вход работает **внутри контейнера** — адрес пира там принадлежит > сети докера, и она же стоит в боевом перечне, — а локальный прогон не > переставляет перечень доверенных адресов на петлевой: петлевые записи > добавляются к тем, что в нём уже стоят. Цена названа в источнике прямо, и владелец принял именно её: > Что этим потеряно, и это надо назвать прямо: боевую поломку больше не ловит > машина. Сервис, поднятый в бою с включённым предохранителем и заполненной > имитацией, отдаст архив всякому, кто дотянулся до него с доверенного адреса, — > а доверенный адрес в бою это адрес обратного прокси, то есть **любой запрос, > пришедший обычным путём**. Между боевой выкладкой и открытым входом остаётся три вещи, и других нет: умолчание предохранителя «выключено»; отказ старта при заполненной имитации без предохранителя; боевой конфиг, который рендерит шаблон Ansible, а не копируют с машины разработчика. Отвергнуты вместе с адресным предохранителем ещё два подхода. **Принудительно слушать петлевой адрес при включённом предохранителе** — «меняет поведение молча … и закрывает ровно то, что решение покупает: внутри контейнера сервис слушает не петлю». **Новый ключ `[server] listen`** — «публичная поверхность настроек ради предохранителя, которого решением владельца нет». ## Почему это ADR Триггер — **намеренный отказ** от очевидного подхода. Требовать петлевой перечень при включённом отладочном входе — первое, что предлагает всякий, кто читает модель угроз; отказ от этого оставляет боевую поломку, которую машина не исключает, и объяснить его надо один раз здесь, а не на каждом ревью, которое эту дыру находит заново. ## Последствия - `+` Отладочный вход работает и на машине разработчика, и внутри контейнера: перечень доверенных адресов остаётся границей доверия, а не признаком отладки. - `+` Локальный прогон не переставляет перечень на петлевой — петлевые записи к нему добавляются. - `+` Предиката «петлевая запись» в коде нет вовсе: он заводился ради одной этой проверки. - `−` **Машина не исключает боевую поломку «конфиг с `debug = true` и заполненной имитацией».** Такой сервис поднимется на любом перечне доверенных адресов и назовёт своим именем всякого, кто пришёл обычным путём. Записано это в модели угроз, [security.md](../security.md), «Периметр», и в спеке [access](../../openspec/specs/access/spec.md). - `−` Одна из трёх опор лежит вне репозитория: шаблон Ansible из `pet-project-server`. Проверить её отсюда нечем — тем же свойством обладает правило прокси про заголовки `Remote-*`.