Authorization weakness in TG bots

Authorization weakness in TG bots


Внимание!
Материал будет крайне полезен всем разработчикам телеграмм ботов

Суть

Задумывались ли вы над авторизацией в своих ботах? А над привязкой номера телефона к аккаунту?

Просто дать пользователю ввести свой номер в теле сообщения даже звучит небезопасно. Поэтому многие из вас уже решили использовать кнопку "отправить мой контактный номер", по нажатию на которую отправляется не текст, а объект Contact.

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

И ведь большинство разработчиков забывает про то, что такой же объект Contact можно скинуть через вложение


В таком случае часто можно получить демо-доступ от имени другого человека или влезть в его кабинет при отсутствии мер защиты.

Как противостоять?

Контакты отправляются через метод API sendContact. (поля, которые принимает метод: https://core.telegram.org/bots/api#sendcontact)

Контакты приходят получателю в виде объекта Contact, с полями: https://core.telegram.org/bots/api#contact

То есть, при отправке поля user_id нет, при получении поле user_id может присутствовать.

Оно присутствует только у номеров, которые зарегистрированы в телеграмме и соответствует user_id владельца номера.

То есть получается, что поле user_id в объект Contact подставляет сам телеграмм.

Исходя из этого: сравнив user_id в присланном контакте с user_id отправителя сообщения мы можем понять, что человек сам отправляет контакты или кто то делает это за него. Что позволяет однозначно связать номер телефона с владельцем аккаунта телеграмм и дать доступ к нашим сервисам.

Итого:

Сравнивайте user_id в присланном контакте с user_id отправителя сообщения, чтобы вам не подкинули чужой контакт


Report Page