Files
transcriber/docs/adr/ADR-2026-08-23-no-address-guard-for-debug-login.md
T
av 52fe31319a локальный вход задаётся конфигом: заголовки подставляет сам сервис
- в конфиг добавлены секция [auth.test_headers] и предохранитель [server] debug:
  заголовки входа подставляет слой транспорта, второго процесса локальный запуск
  больше не требует
- подкоманда devtools proxy удалена целиком: всё, ради чего её поднимали, делает
  сам сервис
- адресного предохранителя нет по решению владельца — цена названа в ADR и в
  модели угроз
2026-08-23 13:12:47 +03:00

6.3 KiB
Raw Blame History

Адресного предохранителя у отладочного входа нет: держит его умолчание, а не машина

Решение

Отладочная подстановка заголовков входа не требует от настроек ничего сверх самого предохранителя [server] debug. Решение владельца на чекпоинте записано в источнике дословно:

«предохранитель по адресам не делаем, полагаемся только на параметр debug».

Рассматривалось требование, чтобы при включённом предохранителе перечень доверенных адресов состоял только из петлевых записей; оно снято вместе с предикатом «петлевая запись», который заводился ровно ради него.

Согласованность с барьером узнавания при этом остаётся: подставленный заголовок проходит тот же перечень доверенных адресов, что и пришедший, и судит адрес та же функция. Предохранителем это не служит — «от конфига она не требует ничего и круга тех, кто мог назваться кем угодно, не расширяет».

Почему

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

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

Цена названа в источнике прямо, и владелец принял именно её:

Что этим потеряно, и это надо назвать прямо: боевую поломку больше не ловит машина. Сервис, поднятый в бою с включённым предохранителем и заполненной имитацией, отдаст архив всякому, кто дотянулся до него с доверенного адреса, — а доверенный адрес в бою это адрес обратного прокси, то есть любой запрос, пришедший обычным путём.

Между боевой выкладкой и открытым входом остаётся три вещи, и других нет: умолчание предохранителя «выключено»; отказ старта при заполненной имитации без предохранителя; боевой конфиг, который рендерит шаблон Ansible, а не копируют с машины разработчика.

Отвергнуты вместе с адресным предохранителем ещё два подхода. Принудительно слушать петлевой адрес при включённом предохранителе — «меняет поведение молча … и закрывает ровно то, что решение покупает: внутри контейнера сервис слушает не петлю». Новый ключ [server] listen — «публичная поверхность настроек ради предохранителя, которого решением владельца нет».

Почему это ADR

Триггер — намеренный отказ от очевидного подхода. Требовать петлевой перечень при включённом отладочном входе — первое, что предлагает всякий, кто читает модель угроз; отказ от этого оставляет боевую поломку, которую машина не исключает, и объяснить его надо один раз здесь, а не на каждом ревью, которое эту дыру находит заново.

Последствия

  • + Отладочный вход работает и на машине разработчика, и внутри контейнера: перечень доверенных адресов остаётся границей доверия, а не признаком отладки.
  • + Локальный прогон не переставляет перечень на петлевой — петлевые записи к нему добавляются.
  • + Предиката «петлевая запись» в коде нет вовсе: он заводился ради одной этой проверки.
  • Машина не исключает боевую поломку «конфиг с debug = true и заполненной имитацией». Такой сервис поднимется на любом перечне доверенных адресов и назовёт своим именем всякого, кто пришёл обычным путём. Записано это в модели угроз, security.md, «Периметр», и в спеке access.
  • Одна из трёх опор лежит вне репозитория: шаблон Ansible из pet-project-server. Проверить её отсюда нечем — тем же свойством обладает правило прокси про заголовки Remote-*.