66 lines
4.7 KiB
Markdown
66 lines
4.7 KiB
Markdown
# Безопасность
|
||
|
||
Безопасность Minishop в первую очередь держится на стабильных секретах, корректном разделении публичных доменов и ограниченном доступе к админке.
|
||
|
||
## Секреты
|
||
|
||
- `WEBAPP_SESSION_SECRET` должен быть постоянным между рестартами, иначе Web App-сессии станут невалидными.
|
||
- `WEBHOOK_SECRET_TOKEN` защищает вебхук Telegram.
|
||
- `PANEL_WEBHOOK_SECRET` проверяет входящие события Remnawave Panel. Секрет задается в Remnawave Panel и вставляется в настройки бота.
|
||
- Платежные токены и webhook-секреты храните в `.env` или настройках админки с учетом доступа к серверу.
|
||
|
||
Сгенерировать секрет можно так:
|
||
|
||
```bash
|
||
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`.
|
||
- Следите за логами платежных вебхуков и вебхуков панели.
|
||
- После ротации секретов перезапускайте соответствующие сервисы и проверяйте вебхуки.
|
||
|
||
См. также [переменные окружения](env-vars.md) и [развертывание](../getting-started/deployment.md).
|