Задать вопрос
@lokubicuv

Как проверить, что данные не подделаны (API ВКонтакте)?

ВК недавно включил приложения сообществ. Открывается iframe с параметрами, но как узнать, что параметры подлинные, а не юзер сам написал? ВК предлагает такое решение:

$sign = ""; 

foreach ($request->getParams() as $key => $param) { 

    if ($key == 'hash' || $key == 'sign') continue; 

    $sign .=$param; 

} 

$secret = 'SECRET_KEY'; 

$sig = $secret ? hash_hmac('sha256', $sign, $secret) : "";


И что? Я получаю в $sig sha256, что мне делать с этим дальше? Вот документация
  • Вопрос задан
  • 268 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@murlogen
Считать внутри (на сервере), сравнивать с тем, что получаешь от пользователя.
Разумеется должно совпадать.
Ответ написан
Комментировать
neluzhin
@neluzhin
Это называется "цифровая подпись". Это когда вы можете быть уверены, что переданные вам данные являются подлинными. Вы знакомы с односторонним шифрованием, типа MD5, SHA1, SHA256 и т.п.? Это процесс, когда вы шифруете данные так, что их невозможно будет расшифровать. Единственное, что можно делать с зашифрованными данными - это проводить сверку. Допустим, когда вы качаете файл с торрент-треккера, там указывают хэш-сумму файла. Когда вы скачиваете файл, вам по хорошему стоит проверить, совпадает ли хэш на треккере с хэшем закаченного вами файла. Если не совпадает, значит, файл повредился в процессе закачки, короче он не соответствует оригиналу. Вот примерно аналогично работают цифровые подписи во ВКонтакте, платежных системах и во многих других сервисах.

Прежде, чем отдать вам "параметры запуска" (ID пользователя, ID группы, откуда запустили, и т.п.), ВКонтакте считает цифровую подпись, подмешивая в неё секретный ключ приложения. Не зная секретного ключа приложения, никто не сможет сгенерировать валидную цифровую подпись. ВКонтакте в приведенном вами примере кода показывает, каким образом они генерируют у себя цифровую подпись, чтобы вы поняли как это вообще работает. Вы должны по этому же алгоритму сгенерировать подпись на сервере и при запуске приложения проверять, соответствует ли сгенерированная вами подпись той, что отдает вам ВКонтакте. Если соответствует, значит, пользователь не подделывал параметры запуска. Если не соответствует, значит, можно закрыть доступ к некоторым функциям вашего приложения или отбросить какую-нибудь HTTP-ошибку, например, 400 или 401.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы