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