# 07 · Безопасность

Панель — приватный административный инструмент: она хранит доступы к регистратору и хостингам.

## Как защищены секреты

- Пароль REG.RU API и все записи хранилища шифруются **libsodium secretbox**; ключ — `APP_KEY` в `.env` (0600), вне БД и git.
- Ключ выводится отдельно для каждой записи и привязан к контексту: украденный шифротекст нельзя переставить в другую строку.
- API-токены хранятся только как SHA-256; plaintext показывается один раз.
- Пароли панели — Argon2id; лимит попыток и блокировка аккаунта.
- CSRF: `SameSite=Strict` + `X-CSRF-Token` для cookie-запросов.
- XSS: строгий CSP без inline-скриптов, данные попадают в DOM только текстом.
- Логи не содержат паролей; ключи `password`, `secret`, `token` редактируются.
- Каждое раскрытие пароля — право `secrets:read` и запись в журнал (кто, IP, время).

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

1. `APP_ENV=production`, `APP_DEBUG=0`.
2. HTTPS + `SESSION_SECURE=1`.
3. nginx: `allow` только доверенным адресам, `deny all`; закрыть `backend/`, `frontend/`, `var/`, `docs/`, dotfiles.
4. В REG.RU API разрешить только IP сервера.
5. Бэкапы — вне веб-корня, с теми же правами, что `.env`.
6. Отдельный токен для агента с минимальными правами; отзывать неиспользуемые.
7. Не выкладывать `mcp/` в веб-корень: MCP запускается по stdio из копии репозитория.

## Если секрет скомпрометирован

1. Отозвать токены: `regru token:list`, `regru token:revoke --id=<id>`.
2. Сменить пароль панели и пароль API REG.RU, обновить белый список IP.
3. Проверить журнал: `credential.reveal`, `hosting.reveal`, `auth.login`, `token.create`.
4. При компрометации `APP_KEY` — считать сохранённые пароли раскрытыми и сменить их у провайдеров.

## Чего панель не защищает

- Пользователя с доступом к серверу/файлам сайта: он может прочитать `.env`.
- Заражённый браузер или расширения.
- Внешние сервисы, которым вы сами передаёте данные.

Модель угроз и правила раскрытия — `SECURITY.md` в репозитории.

Дальше: [Эксплуатация](08-Operations) · [MCP](06-MCP)
