Как не нужно интегрировать платёжные системы

А Вы тоже доверяете своим программистам? Мы идём к Вам!

Внимание: данную статью не следует воспринимать как руководство юного хакера; материал приведён исключительно в ознакомительных целях, чтобы программисты не повторяли подобных ошибок. Итак, имеем платёжную форму (информация, идентифицирующая сайт, затёрта): Ничего сверхестественного: нам предлагают купить некую услугу за $99 в месяц. Всё как обычно. Интересные вещи начинаются, когда смотришь на детали формы: Для тех, кто [...]

← Вернуться к полной версии записи «Как не нужно интегрировать платёжные системы»…

Вложения:

Автор: ; опубликовано в: Безопасность; метки: безопасность, взлом, спуфинг, уязвимость
21
Ноя
2008

RSS Комментарии к статье «Как не нужно интегрировать платёжные системы» (9)  »

  1. Сомнительно как-то все это… Мне кажется в современных, популярных платежных системах такие трюки не пройдут…

  2. :-) Просто у программиста, который интегрировал SecurePay, были кривые руки. Точно так же (криво) можно и PayPal поставить, и WorldPay, и всё, что угодно. Мораль басни такова, что нужно не лениться отсылать требуемые значения из скрипта, а не надеяться, что добрый пользователь не отредактирует форму в FireBug или Web Developer.

    В частности, вот кусок кода с сайта:

    [-]
    View Code PHP
    $params = array_merge($_GET, $_POST); //Уже плохо!
    //...
        $a = array(
          'merchantID'  => $merchantID,
          'password'    => $password,
          'amount'      => $params['a'], //Вот оно пришло с формы - безо всяких проверок
          'clientID'    => $clientID,
          'currency'    => $currency,
          'cardNumber'  => $params['cc'],
          'cvv'         => $params['cvv'],
          'expiryDate'  => "{$params['expiry_date']['month']}/{$params['expiry_date']['year']}"
        );
        $xml = xmlForAddingTriggeredCreditCardPayment($a);
        // Add customer to Securepay!
        $response = securepayXMLtoArray( securepayProcess($payment_url, $xml, $debug) );

    Программёр сэкономил три строчки:

    [-]
    View Code PHP
            $membership = get_membership_by_id($temp_user->membership_id);
            $amount     = $membership->trial_days > 0 ? $membership->trial_price : $membership->fee;
            $amount    *= 100;

    А заказчик “нагрелся” на $98 с первой же попытки.

  3. Чтобы не было путаницы с терминологией: SecurePay — это платёжная система, а скрипт, это та хрень, в которую интегрирована работа с SecurePay.

  4. Александр

    С нашими Яндексом и Webmoney, такое, по-моему, не прокатит.

  5. Andrey

    мне кажется что это рыба… Ну уязвимость конечно есть, но несущественная, сам имею похожую форму pay pal можно заплатить за заказ 1$ пожалуйста, только вам его никто не доставит, ну получили мы платеж на 1$ ну клиент спрашивает, де мой 600 мерседес? а мы спрашиваем де наши 30 000$ вот собственно и все… Результата никакого, кроме создания сотрудникам гемороя :)

    • Андрей, это на membership-сайте. Пользователь платит за контент. Как только платёж прошел, он получает доступ. Пока (и если) владелец сайта обнаружит, что пришёл неверный платёж, пользователь успеет скачать всё, что нужно.

    • Ну вот смысл подписываться на комментарии, если почтовый сервер делает hard bounce?

  6. Любопыпто….Я как то не задумывался WebMoney на на предмет проверки вводимых данных протестировать.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Как не нужно интегрировать платёжные системы»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा