Безопасность http-запросов от яндекс денег


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

Итак, как мы получаем данные? При помощи POST-запроса. Создать его может не только яндекс, но и любой другой пользователь. Например, тут я писал, как его отправить с помощью C#. Так что нам надо проверить, что запрос генерируется именно яндексом. Для этого потребуется знать секретный ключ и уметь высчитывать хеш сумму.

Цитата из документации яндекса:

Один из параметров уведомления, sha1_hash, содержит значение хэш-функции SHA-1 от свертки параметров уведомления совместно с секретным словом.

Секретное слово для проверки уведомлений используется как разделяемый секрет между Яндекс.Деньгами и разработчиком приложения. Благодаря этому подделать уведомление невозможно. Секретное слово можно получить в настройках счета.

Всегда проверяйте значение параметра sha1_hash. Это нужно, чтобы удостовериться в целостности данных уведомления и в том, что уведомление отправлено Яндекс.Деньгами.
Код будет таким:

$secret_key = 'ваш_секретный_ключ';
if ($_POST['amount']) {
$sha1 = sha1( $_POST['notification_type'] . '&'. $_POST['operation_id']. '&' . $_POST['amount'] . '&643&' . $_POST['datetime'] . '&'. $_POST['sender'] . '&' . $_POST['codepro'] . '&' . $secret_key. '&' . $_POST['label'] );
if ($sha1 != $_POST['sha1_hash'] ) {
//дальше не идем – хэш сумма не сходится
	exit();
}
else {	
if ($_POST['codepro']=="false") {	
//здесь исполняемый код в случае нормы
}
}
}
Пара комментариев по коду выше. Сначала мы проверяем, существует ли вообще пост-запрос – смотрим на параметр суммы. Далее высчитываем хэш по формуле от яндекса и сравниваем его с полученным значением. Еще одна проверка – это на параметр codepro – если перевод поступил с кодом подтверждения.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, информационная безопасность, яндекс деньги, post, php




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



Связные списки: введение
Слежение за участком экрана на C#
Урок 28. Цикл foreach C#