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

77 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Адресного предохранителя у отладочного входа нет: держит его умолчание, а не машина
- **Дата:** 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-*`.