roboguard

Как защитить Telegram-бота, webhook и Mini App

Бот может принимать сообщения через Telegram, открывать Mini App, хранить заказы и вызывать платные сервисы. Для каждого входа нужна своя проверка. Начните со способа получения обновлений: от него зависит, есть ли у бота публичный HTTP-обработчик.

Long polling и webhook: где находится вход

При long polling приложение само запрашивает обновления методом getUpdates. Для такого получения сообщений входящий HTTP-домен не обязателен. При webhook Telegram отправляет HTTPS POST на указанный вами адрес. Bot API не использует оба способа получения одновременно.

Даже у бота с long polling могут отдельно существовать панель управления, публичный API, Mini App и платёжный webhook. Добавьте их в карту входов: отсутствие webhook Telegram не означает отсутствие других публичных обработчиков.

КомпонентЧто защищатьРоль RoboGuard
Получение через long pollingТокен, команды, права и расходы приложенияНет входящего домена этого канала, который можно направить через HTTP-прокси.
Webhook TelegramПодлинность уведомления, повтор и обработчикФильтрация HTTP на подключённом домене при совместимых правилах.
Mini App и её APIДанные входа, права пользователя и операцииЗащита публичного домена; серверные проверки приложения сохраняются.
Панель администратораВход, полномочия и административные действияДополнительный контроль запросов к подключённому домену.

Подробнее в первоисточнике: Telegram Bot API: получение обновлений и setWebhook.

Webhook: проверяйте отправителя и повтор

В setWebhook предусмотрен secret_token: Telegram передаёт его в заголовке X-Telegram-Bot-Api-Secret-Token. Задайте отдельное случайное значение и проверяйте его на сервере до выполнения действий. Это не токен управления ботом; секрет webhook также нельзя публиковать в логах и клиентском коде.

Telegram может повторить неуспешно доставленное обновление. Наш практический критерий для учебного бота заказов: одна и та же доставка не создаёт второй заказ и не списывает баланс дважды. Сохраняйте идентификатор обработанного обновления вместе с результатом бизнес-операции; продумайте сбой между записью и ответом.

  1. В своей тестовой среде проверьте, что запрос без верного секрета не запускает команду.
  2. Доставьте одно разрешённое тестовое обновление повторно и сверьте число созданных действий.
  3. Проверьте getWebhookInfo: адрес, ожидающие обновления и время последней ошибки.
  4. После подключения защиты убедитесь, что Telegram получает ожидаемый ответ без браузерной проверки и ненужного редиректа.

Подробнее в первоисточнике: Telegram Bot API: secret_token и повторная доставка.

Доставка из Telegram не даёт права на любую команду

Учебный пример: бот показывает статус заказа и позволяет сотруднику его отменить. Подтверждённое обновление ещё не доказывает, что отправитель — сотрудник нужной организации. Обработчик должен связать Telegram-пользователя с вашей учётной записью и проверить конкретное действие над заказом.

Не доверяйте роли или цене из текста команды, callback-данных или формы. Кнопка администратора может быть скрыта в интерфейсе, но право её действия всё равно проверяет сервер. Если бот работает в группе, отдельно определите, что разрешено участнику, администратору чата и администратору вашего приложения: это разные полномочия.

  • Проверьте команду с обычного собственного тестового аккаунта и аккаунта администратора.
  • Убедитесь, что один пользователь не получает заказ другого только по известному номеру.
  • Проверьте отозванный доступ: ранее разрешённая команда должна перестать выполняться.
  • Не выводите токены, полные внутренние ошибки и чужие данные в ответ чата.

Mini App: доверяйте только проверенным данным входа

Telegram передаёт Mini App данные initData, которые нужно отправить на ваш backend и проверить по официальному алгоритму. Не считайте initDataUnsafe или переданный браузером user.id готовым доказательством личности. Проверка подписи подтверждает происхождение данных; проверка auth_date позволяет ограничить их возраст по вашей политике.

После этого сервер выдаёт предусмотренную сессию и проверяет права на свои объекты. Например, корректные данные Telegram-пользователя не дают ему доступ к любому заказу. Самостоятельно придумывать упрощённый алгоритм подписи опасно: используйте точный протокол Telegram и проверяйте обработку неверных и просроченных данных.

Подробнее в первоисточнике: Telegram: серверная проверка initData Mini App.

Токен и бюджет бота

Токен Bot API нужен только доверенной серверной части, которая работает с ботом. Не вставляйте его в страницу Mini App, скриншот инструкции или публичный пример. Для разработки удобно завести отдельного тестового бота, чтобы проверка команд и смена ключа не затрагивали рабочую аудиторию.

Если команда вызывает модель, обрабатывает видео или отправляет платное сообщение, ограничивайте доступные действия пользователя и общую очередь. Для учебного бота генерации определите, когда задача считается принятой, сколько одновременно выполняется и что происходит после ошибки поставщика. Смена IP не должна создавать новую пользовательскую квоту.

Как подключить публичную часть к RoboGuard

Подходит собственный HTTP(S)-домен Mini App, API, панели или webhook, для которого доступно изменение маршрута и настройка origin. Пропустите через него нормальные сценарии до ужесточения правил. Webhook и серверный API не выполнят JavaScript-проверку браузера: используйте совместимые правила конкретных маршрутов.

Защита трафика не перехватывает переписку Telegram, не исправляет команды и не управляет токеном бота. Если приложение только опрашивает Bot API и не имеет публичных HTTP-входов, для этого канала RoboGuard подключать некуда. Начните с прав, секретов и лимитов в самом боте; при появлении веб-части подключайте её отдельно.

Вопросы и ответы

Нужна ли капча для webhook Telegram?

Webhook — серверный запрос. Он не пройдёт обычную браузерную капчу. Проверяйте предусмотренный Telegram секрет и настройте совместимые ограничения для конкретного маршрута.

Можно ли проверить весь бот по адресу его сайта?

Нет. Публичная страница не раскрывает правила команд, проверку initData, хранение токена и обработку платежей. Эти части проверяются в приложении отдельно.

Защитите публичный HTTP-вход приложения

У вас есть собственный домен API, приложения или webhook? Проверьте требования к DNS и серверу. RoboGuard фильтрует запросы, которые проходят через подключённый домен; права пользователей и бизнес-правила остаются в вашем приложении.

Как подключить приложение