fix: separate admin page and API authentication
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
|
||||
## Исправлено в рабочей версии
|
||||
|
||||
- [x] T02: разделены Basic для административных страниц и Bearer для admin API. 9 сентября проверены положительные/отрицательные сценарии через Caddy; API сохраняет обязательную проверку токена и no-store.
|
||||
|
||||
- [x] T01 полного аудита: маршруты `/api/report` и `/api/report-screenshot` достигают Astro через Caddy; FastAPI получает `/api/v1/*`, health/readiness. 9 сентября: `sh deploy/test-proxy-routing.sh` проходит на локальном стенде с корректным Origin; создание реальной заявки через production proxy остаётся частью T06.
|
||||
|
||||
- [x] Очередь внешних наблюдений фильтруется в SQL до limit/offset; UI показывает по 50 записей с навигацией, опубликованные записи не вытесняют ожидающие проверки.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Аудит RF4 Spotter — 8 сентября 2026
|
||||
|
||||
Обновление 9 сентября: T01 исправлен (`bb61d21`) и проверен скриптом `deploy/test-proxy-routing.sh`. Ниже сохранены исходные находки аудита; актуальные отметки выполнения — в ROADMAP. T02/T03 остаются блокерами production.
|
||||
Обновление 9 сентября: T01 исправлен (`bb61d21`), T02 закрыт разделением Basic для страниц и Bearer для API; оба проверены скриптом `deploy/test-proxy-routing.sh`. Ниже сохранены исходные находки аудита; актуальные отметки выполнения — в ROADMAP. T03 остаётся блокером production.
|
||||
|
||||
База проверки: commit `486b4e9`. Аудит охватывает production-конфигурацию, API, импорт и публикацию данных, Astro, пользовательские сценарии, визуальную идентичность и SEO. Это отчёт о текущем состоянии, а не подтверждение готовности к запуску. Исправления приложения в этот пакет не входят.
|
||||
|
||||
|
||||
+2
-2
@@ -180,12 +180,12 @@
|
||||
|
||||
## Ближайший рабочий пакет
|
||||
|
||||
Production-контур требует исправлений до запуска. Доказательства и критерии приёмки каждого ID находятся в [полном аудите](PROJECT_AUDIT_2026-09-08.md). Следующая задача — **T02**, затем T03. Инфраструктурные изменения можно объединить в один проверочный Compose-прогон.
|
||||
Production-контур требует исправлений до запуска. Доказательства и критерии приёмки каждого ID находятся в [полном аудите](PROJECT_AUDIT_2026-09-08.md). Следующая задача — **T03**. Инфраструктурные изменения можно объединить в один проверочный Compose-прогон.
|
||||
|
||||
### P0 — блокеры production
|
||||
|
||||
- [x] T01: Caddy направляет в FastAPI только `/api/v1/*`, `/health`, `/ready`, обработчики формы остаются в Astro (правка `bb61d21`). Проверено 9 сентября: `sh deploy/test-proxy-routing.sh`, оба POST дают ожидаемый 303, каталог и readiness доступны. Тест использует временный proxy и не создаёт уловов; успешная отправка с сохранением входит в T06.
|
||||
- [ ] T02: согласовать Basic/Bearer admin-аутентификацию через production proxy.
|
||||
- [x] T02: Basic применяется к admin-страницам, Bearer — к admin API, конфликт Authorization устранён. 9 сентября: `sh deploy/test-proxy-routing.sh` проверяет доступ к странице/диагностике, 401 без правильных credentials и авторизованный PATCH с невалидным UUID (422, без записи). Полный цикл модерации — T06.
|
||||
- [ ] T03: обеспечить исходящую сеть community scheduler при изоляции БД/MinIO.
|
||||
|
||||
### P1 — до открытой альфы
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
| Область | Реализация |
|
||||
|---|---|
|
||||
| Внешняя поверхность | наружу публикуются только Caddy `80/443`; PostgreSQL, API, web и MinIO находятся во внутренних сетях |
|
||||
| Admin web/API | `/admin/*` и `/api/v1/admin/*` требуют Caddy Basic Auth; API дополнительно требует длинный bearer token |
|
||||
| Admin web/API | `/admin/*` требует Caddy Basic Auth; `/api/v1/admin/*` требует длинный Bearer-токен в FastAPI. Схемы разделены по маршрутам, поскольку используют один заголовок Authorization (T02, 9 сентября) |
|
||||
| Сравнение токена | constant-time `hmac.compare_digest` |
|
||||
| CORS | production принимает только явно заданные HTTPS origins, wildcard запрещён конфигурацией |
|
||||
| Чувствительные ответы | административные ответы и создание заявки получают `Cache-Control: no-store` |
|
||||
@@ -31,8 +31,10 @@
|
||||
|
||||
1. Убедиться, что `ss -lntup` не показывает наружу порты `4321`, `8000`, `9000`, `9001`, `5432`.
|
||||
2. Проверить `stat -c '%a %U:%G' .env.production`: ожидается `600 rf4spotter:rf4spotter`.
|
||||
3. Без Basic Auth запрос к `/admin/moderation` и `/api/v1/admin/catch-reports` должен вернуть `401` от Caddy.
|
||||
4. С Basic Auth, но без bearer token административный API должен вернуть `401` от FastAPI.
|
||||
3. Без Basic Auth запрос к `/admin/moderation` должен вернуть `401` от Caddy; с правильным Basic — `200`. Bearer не открывает административную страницу.
|
||||
4. Admin API без Bearer, с неверным Bearer или только с Basic должен вернуть `401` от FastAPI; правильный Bearer даёт доступ и `Cache-Control: no-store`. Владение API-токеном достаточно для API-доступа; дополнительная Basic-проверка к этим запросам не применяется.
|
||||
5. Проверить security headers через `curl -I https://rf4spotter.ru/`.
|
||||
6. Убедиться, что `https://files.rf4spotter.ru/` не открывает Console, list buckets или анонимную запись.
|
||||
7. После проверки удалить команды с секретами из shell history либо вводить их через защищённый password manager.
|
||||
|
||||
Локальная проверка: `sh deploy/test-proxy-routing.sh` запускает временный Caddy с production-маршрутами перед работающим Compose. `probe-admin-auth.py` читает токен из окружения API-контейнера и не печатает его. Проверяются успешное чтение, отказы и PATCH с невалидным UUID без изменения данных; полный цикл реальной модерации через proxy относится к T06.
|
||||
|
||||
Reference in New Issue
Block a user