Токен Telegram-бота: безопасность ключа, который нельзя показывать

Самое ценное в Telegram-боте — не код. Код можно переписать за неделю, а то и за день. Самое ценное — одна строчка из цифр и букв, которую клиент бота никогда не видит и которую владелец, бывает, видел ровно один раз, в момент создания.

Эта строчка называется токен. В документации Telegram она описана без всякой поэзии — строка вида 110201543 с двоеточием и хвостом из латиницы, которая нужна, чтобы авторизовать бота и отправлять запросы к Bot API. И тут же, следующей фразой, предупреждение, которое я бы вешал над столом каждого, кто заказывает бота: храните токен в безопасности, им может воспользоваться кто угодно, чтобы управлять вашим ботом.

Кто угодно. Не только тот, кто знает пароль от вашего Telegram, и не только тот, у кого ваш телефон. Тот, у кого есть строчка.

Ключ без замка

Попросту говоря, токен — это ключ от квартиры, на котором не написано, кто хозяин. Telegram не спрашивает, кто пришёл с этим ключом. Любой запрос по адресу api.telegram.org, в котором после слова bot стоит ваш токен, сервер Telegram считает запросом вашего бота. Писать людям от имени бота, перенаправить все входящие сообщения на чужой сервер, сменить описание — всё это делается запросами по тому же адресу, если строка есть.

Есть даже метод getMe, который в документации назван простым способом проверить токен. Подставил строчку, получил в ответ имя бота. Работает — значит, ключ подходит.

Обратите внимание на одну деталь из учебника Telegram для разработчиков. Токен аутентифицирует бота, а не ваш аккаунт. Это хорошая новость и плохая одновременно. Хорошая — по токену нельзя зайти в вашу личную переписку. Плохая — всё, что делает бот, по токену сделать можно. А бот у малого бизнеса — это обычно окно, через которое к вам приходят клиенты. Заявки, записи, заказы с адресами.

Почему ключ всё время кто-то держит в руках

Теперь о моей роли, чтобы не было недоговорённостей. Я тот самый человек, которому токен дают. Без него бота не сделать: код, который я пишу, должен как-то представиться Telegram, и представляется он именно этой строчкой.

Получается ситуация, знакомая любому, кто делал ремонт. Квартира ваша, но ключи на время работ у прораба. Ничего дурного в этом нет, так устроен процесс. Дурное начинается, когда ремонт закончился, а ключи так и остались у всех, кто через квартиру прошёл.

С ботами это случается чаще, чем с квартирами, потому что токен — не железка, его не нужно возвращать из рук в руки. Его копируют. В переписку с одним разработчиком, потом с другим, в заметки на телефоне, в файл с кодом, который потом выкладывают куда-нибудь «показать». Каждая копия — ещё один ключ. И ни одну из них нельзя забрать обратно.

Учебник Telegram советует то же, что советуют про пароли: относиться к токену как к паролю и никому его не показывать. А в коде держать не прямо в тексте программы, а в отдельном файле настроек или в переменных окружения. Мой демо-бот, к слову, так и устроен — он берёт токен из переменной окружения, и в коде его нет. Если код кто-то увидит, ключа он там не найдёт.

Сменить замок

Хорошо, что у этой истории есть простой конец. Ключ можно поменять, не меняя квартиру.

В BotFather, том самом служебном боте Telegram, где ботов создают, есть команда /token. Документация описывает её одной строкой: если ваш токен скомпрометирован или вы его потеряли, используйте /token, чтобы получить новый. Учебник добавляет, что токен можно отозвать в любой момент. Старый ключ после этого перестаёт открывать дверь, бот остаётся тем же — с тем же именем, теми же пользователями и тем же адресом в t.me.

Одно предупреждение, которое обычно забывают. Бот на сервере тоже работает со старым ключом. Если сменить токен и никуда его не вписать, бот замолчит. Поэтому замену делают так же, как замок после ремонта, — вместе с тем, кто знает, где на сервере лежит настройка. Работы там немного, но её нужно сделать, а не просто нажать кнопку в BotFather и пойти пить чай.

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

Чей бот на самом деле

Есть вопрос глубже токена. Кто вообще считается владельцем бота?

Владелец — тот, в чьём аккаунте бот создан в BotFather. Именно этот человек может сменить токен, имя, описание и, в крайнем случае, удалить бота. Если бота создавал разработчик в своём аккаунте, то, сколько бы токенов вы ни получили, хозяин — он.

У Telegram для этого есть передача владения. В BotFather нужно открыть /mybots, выбрать бота и передать его другому пользователю. Условие одно — новый владелец должен хотя бы раз пообщаться с этим ботом. Документация предупреждает прямо: передача даёт новому хозяину полный контроль, доступ к сообщениям бота и даже возможность его удалить, и передача необратима.

Необратима — это серьёзно. Поэтому отдавать бота стоит тому, кому вы и так доверяете, а получать — проверив, что он теперь действительно в вашем списке /mybots.

Отдельная мелочь, которая ничего не стоит до тех пор, пока не станет поздно. Имя пользователя бота, то, что идёт после t.me, по правилам Telegram нельзя изменить после создания. Имя на экране можно менять сколько угодно, а адрес — нет. Его выбирают один раз, и лучше вместе с владельцем, а не за него.

Как это устроено у меня

У меня условия простые, и они написаны на сайте. Бот работает под вашим токеном. Код и инструкция остаются у вас, и дорабатывать бота можно с любым программистом. Перенос бота на ваш сервер вместе с инструкцией по управлению стоит 0 ₽ — это отдельная строка в прайсе, а не обещание в переписке.

После сдачи я бы советовал сделать то, что выше названо сменой замка, — выпустить новый токен через /token и вписать его на сервере. Тогда ключ останется в одном месте, у вас. Если боту нужна будет доработка, вы дадите новый ключ тому, кому сочтёте нужным, — мне или кому-то другому, а потом снова его смените.

Чего я не знаю — так это сколько ботов сейчас работает на токенах, разосланных когда-то по чатам. Таких цифр у Telegram в документации нет, и придумывать их я не буду. Подозреваю, что немало. Если вы не уверены, кто ещё держит ваш ключ, лечится это одинаково — новым токеном. Если же бот достался вам от другого разработчика и вы не понимаете, где у него лежит токен и как его безопасно сменить, — опишите проект в форме на сайте, я посмотрю и скажу, сколько это стоит, до начала работы.

Можно, конечно, и ничего не менять. Ключ ведь никто не терял, просто он есть у нескольких хороших людей. Так и с квартирами живут годами.

Оцените статью

Комментарии

Загружаю комментарии…

Написать комментарий

Комментарии публикуются сразу после автоматической проверки на спам и рекламу. Ссылки в комментариях не кликабельны.