Skip to content

07 Security

Mikhail Deynekin edited this page Oct 22, 2026 · 1 revision

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 в репозитории.

Дальше: Эксплуатация · MCP

Clone this wiki locally