Валидация данных

MAX передаёт стартовые параметры мини-приложению с каждым запуском. Чтобы убедиться, что эти данные принадлежат реальным людям и не были изменены или скомпрометированы, рекомендуем проверять их подлинность через процедуру валидации

Валидация данных на стороне мини-приложения

  1. С запуском мини-приложения его клиентская часть получает закодированную строку для валидации данных через WebAppData

  2. Мини-приложение извлекает данные, которые должны быть провалидированы. Эти же данные можно считать через глобальный объект window.WebApp.InitData

    Пример строки с данными Init Data

Код
Скопировать
auth_date%3D1733485316394%26query_id%3D158b120b-7aa3-4a0f-a198-52ace06d0658%26user%3D%257B%2522language_code%2522%253A%2522ru%2522%252C%2522first_name%2522%253A%2522%25D0%2592%25D0%25B0%25D1%2581%25D1%258F%2522%252C%2522last_name%2522%253A%2522%2522%252C%2522photo_url%2522%253Anull%252C%2522username%2522%253Anull%252C%2522id%2522%253A400%257D%26hash%3Df982406d90b118d8e90e26b33c5cec0cadd3fc30354f2955c75ff8e3d14d130d
  1. Подготавливаем данные к валидации:
Код
Скопировать
auth_date=1662771648\nquery_id=AAHdF6IQAAAAAN0XohDhrOrc\nuser={"id":279058397,"first_name":"","last_name":"","username":"vdkfrost","language_code":"ru",   // hash 'f982406d90b118d8e90e26b33c5cec0cadd3fc30354f2955c75ff8e3d14d130d'
  1. Создаём ключ шифрования (secret_key) с помощью алгоритма хеширования HMAC-SHA256. Используем ключ WebAppData и токен, выданный при регистрации чат-бота в @MasterBot

    HMAC_SHA256(“WebAppData” + “Bot Token”)
Код
Скопировать
HMAC_SHA256( "WebAppData",  "2Uk3Z_8zAlwhprgOcK3r1B1fDk8uhi2MDv47EvXkcu8" // Bot Token ) = "2acdf1cf8727a58bfad2dfd1129144a464e3ce73aee3d120e499d1dbb0683e31"
  1. Вычисляем подпись (hash) стартовых параметров Init Data. Для этого создадим ещё одну подпись с помощью алгоритма хеширования HMAC-SHA256: используем отсортированные пары {key}={value} и ключ шифрования (secret_key) в качестве криптографического ключа в шестнадцатеричном формате. Результат преобразуем в строку с помощью функции hex

hex(HMAC_SHA256(secret_key, data_check_string))

Код
Скопировать
hex(HMAC-SHA256( "2acdf1cf8727a58bfad2dfd1129144a464e3ce73aee3d120e499d1dbb0683e31", "auth_date=1733485316394\nquery_id=158b120b-7aa3-4a0f-a198-52ace06d0658\nuser={\"language_code\":\"ru\",\"  first_name\":\"\",\"last_name\":\"\",\"photo_url\":null,\"username\":null,\"id\":400}" )) = "f982406d90b118d8e90e26b33c5cec0cadd3fc30354f2955c75ff8e3d14d130d"
  1. Сравниваем получившийся результат: если полученная подпись совпадает с hash из Init Data, данные подлинные. Если нет — данные были изменены

ℹ️ Если у вас возникли вопросы, посмотрите раздел с ответами