cleanup: PRODUCTION-READY-ANALYSIS.md → audits/
This commit is contained in:
@@ -1,59 +0,0 @@
|
||||
# Отчет о результатах анализа проекта ipwhitelist-app перед деплоем в production
|
||||
|
||||
Данный анализ выполнен на основе инструкций из [prompt-review.txt](prompt-review.txt).
|
||||
|
||||
### 1. Общее заключение
|
||||
**Вердикт: Можно отдавать в production (с оговорками).**
|
||||
|
||||
Приложение обладает зрелой архитектурой, разделенной на API-слой и SSR UI-слой. Реализованы критически важные механизмы: полноценная OIDC-интеграция с Keycloak, аудит действий, валидация CIDR и защита от гонок данных. Однако требуется устранение ряда Major-замечаний по безопасности (CSRF) и доработка конфигурации nginx.
|
||||
|
||||
---
|
||||
|
||||
### 2. Найденные проблемы
|
||||
|
||||
| Проблема | Критичность | Описание |
|
||||
|:---|:---:|:---|
|
||||
| **Отсутствие CSRF-защиты в UI** | **Critical** | Middleware `doubleCsrfProtection` инициализирован в [src/middleware/csrf.js](src/middleware/csrf.js), но **не подключен** к роутам в `server.js` или `ui/index.js`. Все POST-запросы UI (добавление/удаление IP) сейчас уязвимы. |
|
||||
| **Публичное состояние /export** | **Major** | Роут `/export` в [server.js](server.js#L78) помечен как "ВРЕМЕННО без авторизации". В проде это приведет к утечке списка всех доверенных IP клиентов. Нужно включить `auth.bearerMiddleware`. |
|
||||
| **Незавершенный OIDC-роутинг** | **Major** | В [src/routes/oidc.js](src/routes/oidc.js) используется функция `safeLocal`, тогда как в [src/auth.js](src/auth.js) экспортируется аналогичная `safeReturn`. В коде роутера есть риск ReferenceError, если не импортирована нужная функция. |
|
||||
| **Конфигурация nginx** | **Major** | В [docs/devops-deploy.md](docs/devops-deploy.md) в конфиге nginx отсутствует `proxy_set_header X-Forwarded-Proto $scheme`. Без этого Express не узнает, что работает по HTTPS, и `secure: true` для кук сессии может работать некорректно. |
|
||||
| **Отсутствие health-check БД** | **Minor** | `/healthz` возвращает `OK` даже если БД недоступна. Для качественного мониторинга стоит добавить проверку `pool.query('SELECT 1')`. |
|
||||
|
||||
---
|
||||
|
||||
### 3. Понятность DevOps
|
||||
**Оценка: 9/10**
|
||||
- **Плюсы:** Наличие пошагового [docs/devops-deploy.md](docs/devops-deploy.md) с командами для Ubuntu 22/24. Четко описан процесс регистрации клиента в Keycloak и необходимые мапперы.
|
||||
- **Минусы:** В документации не упомянуто требование к версии Node.js (хотя в README указана 20+). Не все переменные из `.env.example` снабжены подробными комментариями (например, `IAM_API_URL` важен для прода).
|
||||
|
||||
---
|
||||
|
||||
### 4. Чистота кода
|
||||
**Оценка: 8/10**
|
||||
- **Логика:** Отличное разделение ответственности. Использование `async/await` везде корректно, ошибки обрабатываются централизованно.
|
||||
- **Безопасность:** Реализован CSP с жесткими директивами, Rate Limiting для разных типов запросов, валидация IP исключает приватные диапазоны (RFC 1918 и др.).
|
||||
- **Замечание:** Присутствует небольшое дублирование логики маппинга пользователя из токена в `src/auth.js` и `ui/index.js`, что может привести к расхождениям при обновлении IAM.
|
||||
|
||||
---
|
||||
|
||||
### 5. Рекомендации к исправлению (Action Plan)
|
||||
|
||||
1. **Включить CSRF:**
|
||||
* В `server.js` инициализировать CSRF: `const { doubleCsrfProtection, generateCsrfToken } = initCsrf();`.
|
||||
* Подключить `doubleCsrfProtection` ко всем POST-маршрутам в `ui/index.js`.
|
||||
* Передать `csrfToken` в шаблоны через `res.locals`.
|
||||
2. **Защитить `/export`:**
|
||||
* Раскомментировать `auth.bearerMiddleware` в [server.js](server.js#L78).
|
||||
* Обновить документацию для систем фильтрации: экспорт теперь требует заголовок `Authorization: Bearer <token>`.
|
||||
3. **Исправить OIDC Callback:**
|
||||
* В [src/routes/oidc.js](src/routes/oidc.js) импортировать `safeReturn` из `auth` и использовать его вместо локальной заглушки.
|
||||
4. **Уточнить nginx config:**
|
||||
* Добавить `proxy_set_header X-Forwarded-Proto $scheme;` в [deploy-guide](docs/devops-deploy.md) для корректной работы `trust proxy`.
|
||||
5. **Fail-fast проверки:**
|
||||
* Добавить проверку наличия `IAM_API_URL` при старте в режиме `DEV_MODE=false`.
|
||||
|
||||
### Ответы на вопросы для анализа (из prompt-review.txt):
|
||||
* **Fallback на JWT:** Реализован корректно в [src/routes/oidc.js](src/routes/oidc.js) через `try-catch` вокруг `fetchIamUser`.
|
||||
* **Timeout IAM API:** Установлен (10 секунд) в [src/auth.js](src/auth.js#L236).
|
||||
* **Open Redirect:** Защита реализована функцией `safeReturn` (проверка на старт с `/` и запрет `//`).
|
||||
* **Хардкоженные секреты:** Не обнаружены, все критичные данные читаются из `process.env` с падением сервера при их отсутствии в `production`.
|
||||
Reference in New Issue
Block a user