# Политика безопасности

## Поддерживаемые версии

| Версия | Поддержка |
|---|---|
| 1.x | да |

## Как сообщить об уязвимости

Не открывайте публичный issue. Напишите владельцу репозитория приватно (контакт указан в профиле GitHub) и приложите: версию, шаги воспроизведения, ожидаемое и фактическое поведение. Ответ — в течение 72 часов.

## Модель угроз

Панель хранит доступы к регистратору и хостингам, поэтому рассматривается как **секретный административный инструмент**, а не публичный сервис.

| Угроза | Защита |
|---|---|
| Утечка пароля REG.RU из БД/бэкапа | libsodium `secretbox`; ключ только в `.env` (0600), вне БД и git |
| Утечка паролей из хранилища | шифрование с привязкой к id записи; список API не содержит паролей |
| Кража API-токена | хранится только SHA-256; plaintext показывается один раз; scope-ограничение; отзыв |
| Подбор пароля панели | Argon2id, лимит попыток, блокировка аккаунта, задержка ответа |
| CSRF | SameSite=Strict cookie + `X-CSRF-Token`; Bearer-запросы не подвержены CSRF |
| XSS | строгий CSP без `unsafe-inline`; данные в DOM попадают только текстовыми узлами (`h()`) |
| Кликджекинг | `X-Frame-Options: DENY`, `frame-ancestors 'none'` |
| Утечка через логи | редакция ключей `password/secret/token/…`, тела запросов не логируются |
| Перебор API | лимит на токен/IP, 429 с `Retry-After` |
| Компрометация REG.RU API | белый список IP в настройках REG.RU; локальный предохранитель 1100 запросов/час |
| Злоупотребление раскрытием секретов | отдельный scope `secrets:read`; каждое чтение в `audit_log` (актор, IP, время) |

## Что НЕ является угрозой в рамках модели

- Доступ администратора к серверу: он и так может прочитать `.env` и БД.
- Атака на сам REG.RU API или его TLS.
- Утечка через браузер пользователя, заражённый расширениями.

## Обязательные настройки при развёртывании

1. `APP_ENV=production`, `APP_DEBUG=0`.
2. `APP_KEY` — 32 случайных байта, `chmod 600 .env`.
3. `SESSION_SECURE=1` и HTTPS.
4. Ограничение доступа к панели в nginx: `allow` только доверенным сетям/адресам, `deny all` для остальных; каталоги `backend/`, `frontend/`, `var/`, `docs/` и dotfiles закрыты.
5. Разрешить в REG.RU API только IP сервера.
6. Резервные копии — вне веб-корня, с теми же правами, что и `.env`.
7. Cron-синхронизация — под отдельным пользователем сайта, без доступа к shell.

## Реакция на инцидент

1. Отозвать все API-токены: `regru token:list` → `token:revoke --id`.
2. Сменить пароль панели и пароль REG.RU API; в настройках REG.RU обновить белый список IP.
3. Сменить `APP_KEY` **только вместе с перешифровкой**: без старого ключа пароли в БД не восстановить. Если ключ скомпрометирован — считайте все сохранённые пароли раскрытыми и смените их у провайдеров/панелей.
4. Проверить `audit_log` за период, особенно `credential.reveal`, `hosting.reveal`, `auth.login`, `token.create`.
5. Восстановить БД из проверенной резервной копии при признаках изменения данных.

## Ограничения

- Приложение не защищает от вредоносного кода с правами пользователя сайта (`site_user`): он читает `.env`.
- Приватность: при включённом внешнем rerank/embedding у поисковых провайдеров данные могут уходить с сервера — это не относится к панели, но учитывайте при интеграциях.
- REG.RU не возвращает пароли панелей для всех типов услуг; если API их не отдал, пароль можно сохранить вручную — он будет зашифрован так же.
