Безопасность 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.