Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
  • Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Веб Универсальный скрипт для работы с платёжными системами

Я тут это... Дыру нашёл случайно.
Oxz0L6z.png

Эти 2 функции выполняются независимо, а значит если я знаю адрес обработчика, я могу передать method=pay
сумму денег в sum и ник в account и он зачислит деньги на счёт. Да, ссылку на обработчик нужно поискать, но ведь это большая дыра.
Как можно это пофиксить?
 
Вставить проверку в pay или вызывать pay только если up_sign вернула положительный ответ(п.с. я смотрел только юнит, может и в интеркассе есть дыра.)
Просто добавить IP в список разрешенных для страницы проверки оплаты. В официальной библиотеке Unitpay все это есть. правда там был 1 косяк, который исправили после моего обращения.
 
Я тут это... Дыру нашёл случайно.
Oxz0L6z.png

Эти 2 функции выполняются независимо, а значит если я знаю адрес обработчика, я могу передать method=pay
сумму денег в sum и ник в account и он зачислит деньги на счёт. Да, ссылку на обработчик нужно поискать, но ведь это большая дыра.
замени функцию
PHP:
    public function up_sign($reply) { // Проверка цифровой подписи unitpay
        ksort($reply); // сортируем массив
        $exp = explode("-", $this->up['project_id']);
        $Sign = $reply['sign']; // сохраняем подпись
        unset($reply['sign']); // удаляем подпись
        $reply['projectId'] = $exp[0]; // заменяем существующий ид проекта на свой, дабы убедиться, что запрос от нашего UP
        $return = (md5(join(null, $reply).$this->up['key']) != $Sign) ? "error" : "success"; // генирация и проверка подписи
        echo $this->up_json_reply($return, $reply);
return $return;
    }
и в payment.php
PHP:
            case "pay" :
                if($pay->up_sign($_REQUEST['params']) == "error") exit();
                $pay->pay($_REQUEST['params']['sum'], $_REQUEST['params']['account']);
            break;
говнокодное решение проблемы
 
Последнее редактирование:
замени функцию
PHP:
    public function up_sign($reply) { // Проверка цифровой подписи unitpay
        ksort($reply); // сортируем массив
        $exp = explode("-", $this->up['project_id']);
        $Sign = $reply['sign']; // сохраняем подпись
        unset($reply['sign']); // удаляем подпись
        $reply['projectId'] = $exp[0]; // заменяем существующий ид проекта на свой, дабы убедиться, что запрос от нашего UP
        $return = (md5(join(null, $reply).$this->up['key']) != $Sign) ? "error" : "success"; // генирация и проверка подписи
        echo $this->up_json_reply($return, $reply);
return $return;
    }
и в payment.php
PHP:
            case "pay" :
                if($pay->up_sign($_REQUEST['params']) == "error") exit();
                $pay->pay($_REQUEST['params']['sum'], $_REQUEST['params']['account']);
            break;
говнокодное решение проблемы
Я тебе уже давно говорил о привязки к IP. UnitPay поняла о чем я говорил, поэтому и ввела фишку смены ключа.
 
замени функцию
PHP:
    public function up_sign($reply) { // Проверка цифровой подписи unitpay
        ksort($reply); // сортируем массив
        $exp = explode("-", $this->up['project_id']);
        $Sign = $reply['sign']; // сохраняем подпись
        unset($reply['sign']); // удаляем подпись
        $reply['projectId'] = $exp[0]; // заменяем существующий ид проекта на свой, дабы убедиться, что запрос от нашего UP
        $return = (md5(join(null, $reply).$this->up['key']) != $Sign) ? "error" : "success"; // генирация и проверка подписи
        echo $this->up_json_reply($return, $reply);
return $return;
    }
и в payment.php
PHP:
            case "pay" :
                if($pay->up_sign($_REQUEST['params']) == "error") exit();
                $pay->pay($_REQUEST['params']['sum'], $_REQUEST['params']['account']);
            break;
говнокодное решение проблемы
Я у себя вообще с 0 написал, просто оповестил тут народ, что есть дыра.
 
Добавь лучше оплату WebMoney без аттестата цены не будет тебе!
не в моих интересах, я просто переписал код так, как мне под него будет удобнее писать.
Учитывая то, что я уже выкладывал платежи на ИК и ЮП, выложил новый скрипт, но не тестил.
Под этот проще писать под другие платежки, развелось их как грязи
D83DDE02.png
D83DDE02.png
, а народ заказывает
 

Поделиться этой страницей

Назад
Верх