@lokubicuv

Как проверить подлинность данных, получаемых с ВКонтакте?

Недавно ВК запустила "Приложения для сообществ". Обычный iframe, на адрес iframe передаются гет-параметры с id юзера, и другая инфа...

Для безопасности мне нужно удостовериться, что эти гет-параметры не подделаны пользователем. В документации кажется есть решение этого:


Среди параметров запуска передаётся sign — подпись запроса. С её помощью Вы можете удостовериться, что данные запроса не были подменены на стороне клиента.

Пример кода на языке PHP для проверки подписи запроса:
$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) : "";


Этот код создает переменную $sign, потом пробегается по всем гет параметрам, пропуская hash и sign, а остальные записывает в $sign. Далее в $sig записывается sha256 значений гет параметров, c использованием ключа из $secret; Я все сделал также, но при сравнении $sig и гет-параметра sign строки не совпадают. Я что-то не так сделал?

Мой код:

$sign = '';
		
		foreach ($this->input->get() as $key => $value)
		{
			if ($key == 'hash' || $key == 'sign') continue; 
			
			$sign .= $value;
		}
		
		$secret = 's91kf39194ksk141jSdsj1';
		
		$sig = $secret ? hash_hmac('sha256', $sign, $secret) : '';

		echo $sig == $this->input->get('sign');


Ничего не выводит, т. е. строки не равны
  • Вопрос задан
  • 507 просмотров
Пригласить эксперта
Ответы на вопрос 1
kirill_782
@kirill_782
Днем я Маринетт
Тут 2 варианта:
1) Параметры обрабатываются не в том порядке (например вы обрабавтываете отсортированные значения)
2) По пути от вк к скрипту добавился новый параметр, например от rewrite_module.
А вообще покажите на экран что получилось в $sig , $key , $value покажите. Может быть они пустые. Короче сделайте дебаг
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы