Skip to main content

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

Бот — это автоматический пользователь с токеном. Если токен утёк — кто угодно может писать, удалять, банить от его имени. Несколько простых правил защитят вас.

🔑 Токен — это пароль​

Токен бота выглядит как 1234567890:AbCdEf.... Это полный доступ к боту. Кто угодно с токеном:

  • Пишет от имени бота
  • Удаляет/банит участников там где бот админ
  • Читает все сообщения которые бот видит
  • Получает webhook-уведомления (если настроены)

Никогда:

  • ❌ Не кладите токен в публичный git репозиторий
  • ❌ Не отправляйте токен в чаты, скриншоты или почту
  • ❌ Не давайте токен незнакомым «помощникам по настройке»

Правильно:

  • ✅ Храните в .env файле, добавленном в .gitignore
  • ✅ Используйте secret manager (Vault, Doppler, GitHub Secrets)
  • ✅ На сервере — только в переменной окружения
  • ✅ В Docker — через --env-file или secrets

Если токен утёк​

  1. Откройте Профиль → Мои боты → выбранный бот.
  2. «Сбросить токен» — сразу.
  3. Старый токен немедленно перестаёт работать.
  4. Подмените новый токен в коде и перезапустите бота.
  5. Проверьте логи бота за период утечки — не сделал ли кто-то лишнего.

Сервис GitGuardian автоматически сканирует публичные репозитории GitHub на токены. Если ваш утёк туда — придёт письмо. Telefon делает то же самое: при первом запросе с скомпрометированного токена он автоматически сбрасывается, вам приходит уведомление.

🛡 Не делайте бота админом без необходимости​

Каждое право — это потенциальный ущерб если бот взломан. Дайте минимально нужные права:

Что бот делаетКакие права давать
Отвечает на командыНикаких — обычный участник
Шлёт уведомленияНикаких
Постит в каналТолько «Публиковать посты»
Модерирует группуУдалять сообщения, банить
Полный контрольТолько если вы автор и абсолютно доверяете коду

Не давайте право «Назначать админов» — это позволяет боту повышать кого угодно (включая злоумышленника).

🤖 Не запускайте чужих ботов как админов​

Если в интернете советуют «добавь нашего бота админом для крутых функций»:

  • Прочитайте отзывы про этого бота
  • Зайдите на профиль автора — есть ли его контакты, репутация
  • Проверьте код (если open-source)
  • Дайте минимум прав для теста

Лучше потерять 5 минут на проверку чем неделю восстанавливать заминированный канал.

🔒 Настройте «Кто может писать боту»​

Если бот только для вашей команды — ограничьте доступ:

Настройки бота → «Кто может писать» → «Выбранные» → перечислите @username команды.

Так бот не отвечает случайным пользователям, экономит ваш бюджет на API/AI и не светится в публичных списках.

⚠ Опасные паттерны в коде бота​

Если вы пишете бота сами — несколько частых уязвимостей:

Eval / выполнение чужого кода​

# ❌ ОПАСНО
@dp.message()
async def calc(m):
result = eval(m.text) # юзер пришлёт os.system('rm -rf /')
await m.answer(str(result))

Используйте безопасный калькулятор (asteval, simpleeval).

Передача user_input в shell​

# ❌ ОПАСНО
os.system(f"curl https://api.example.com/{m.text}")

# ✅ ПРАВИЛЬНО
subprocess.run(["curl", url], shell=False)

SQL-инъекция​

# ❌ ОПАСНО
db.execute(f"SELECT * FROM users WHERE name='{m.text}'")

# ✅ ПРАВИЛЬНО (параметризованный запрос)
db.execute("SELECT * FROM users WHERE name=%s", (m.text,))

Открытый Mini App для всех​

Если ваш Mini App имеет админ-функции — проверяйте подпись initData на бэкенде, не доверяйте параметрам из URL.

Подозрительные действия — куда жаловаться​

Если бот рассылает спам, подделывается под официальный сервис, или украл данные:

  • В Telefon: тап по @username бота → «Пожаловаться» → выбрать причину.
  • На email: abuse@telefon.chat с описанием и ссылками.
  • Команда модерации проверяет 24/7.

2FA на вашем аккаунте​

Не забудьте включить двухфакторку на аккаунте Telefon (Настройки → Конфиденциальность → 2FA). Иначе если ваш аккаунт угонят — вместе с ним угонят и всех ваших ботов.