Files
remnawave-minishop/docs/configuration/security.md
T

4.7 KiB
Raw Blame History

Безопасность

Безопасность Minishop в первую очередь держится на стабильных секретах, корректном разделении публичных доменов и ограниченном доступе к админке.

Секреты

  • WEBAPP_SESSION_SECRET должен быть постоянным между рестартами, иначе Web App-сессии станут невалидными.
  • WEBHOOK_SECRET_TOKEN защищает вебхук Telegram.
  • PANEL_WEBHOOK_SECRET проверяет входящие события Remnawave Panel. Секрет задается в Remnawave Panel и вставляется в настройки бота.
  • Платежные токены и webhook-секреты храните в .env или настройках админки с учетом доступа к серверу.

Сгенерировать секрет можно так:

openssl rand -hex 32

Telegram антифлуд

Апдейты Telegram-бота проходят через ранний anti-flood middleware до sync профиля, проверки каналов и логирования действий, которые обращаются к базе. Профиль по умолчанию специально мягкий: он не должен мешать быстрым обычным нажатиям кнопок, но отбрасывает экстремальные всплески сообщений и callback от одного источника до того, как они разгонят записи в БД, платежные обработчики или Telegram FloodWait.

Настройки доступны в Админка -> Система -> Настройки -> Система -> Telegram антифлуд. Для обычного приватного продающего бота дефолтов достаточно, поэтому они не добавлены в .env.example. Меняйте их только если реальный трафик показывает, что пороги нужно расширить или сузить.

  • TELEGRAM_DROP_NON_PRIVATE_UPDATES=True отбрасывает апдейты из групп и каналов до дорогих middleware. Оставляйте включенным, если бот не должен работать вне приватных чатов.
  • TELEGRAM_ANTIFLOOD_ENABLED=True включает per-user/per-chat лимиты. Значение 0 у отдельного числового лимита отключает только этот лимит.
  • TELEGRAM_ANTIFLOOD_WINDOW_SECONDS=60 задает общее скользящее окно. Дефолты рассчитаны на нормальные button-heavy флоу: 180 всех апдейтов, 120 сообщений, 240 callback, 60 inline-запросов, 30 команд /start и 60 тяжелых callback за окно.
  • TELEGRAM_ACTION_COOLDOWN_ENABLED=True дедуплицирует точные повторные платежные и trial callback от того же пользователя. Разные платежные payload не объединяются, поэтому обычный checkout остается независимым.

Доступ администраторов

  • ADMIN_IDS задает Telegram ID администраторов.
  • Админка доступна только пользователям из ADMIN_IDS при входе через Telegram.
  • Email-only аккаунты не получают админский доступ.

Публичные URL

  • WEBHOOK_BASE_URL должен вести на backend-сервер вебхуков.
  • В Remnawave Panel WEBHOOK_URL должен быть WEBHOOK_BASE_URL + /webhook/panel, например https://app.example.com/webhook/panel.
  • SUBSCRIPTION_MINI_APP_URL должен вести на frontend/Mini App-домен.
  • Не добавляйте /api, /auth или webhook-пути в SUBSCRIPTION_MINI_APP_URL.

Дополнительно

  • Используйте HTTPS на всех публичных доменах.
  • Ограничивайте доступ к серверу и .env.
  • Следите за логами платежных вебхуков и вебхуков панели.
  • После ротации секретов перезапускайте соответствующие сервисы и проверяйте вебхуки.

См. также переменные окружения и развертывание.