Каким методом обошли проверку баланса в скрипте?

Приветствую, ребят.
В общем с резерва кошелька увели средства. Ребята молодцы, но суть не в этом.
Я не пойму каким макаром это можно было сделать. Какие POST запросы он передавал?
Переменная $balance берется из базы. Подскажите, в какую сторону копать, и где об этом можно почитать подробнее?
Вот форма:
<form action="/cashout" method="POST">
Кому: <input type="text" class="form-control" name="payeer" placeholder="Payeer кошелек" pattern="P[0-9]{7,10}" required=""><br>
Сколько: <input type="number" name="amount" placeholder="Сумма в рублях">
<input type="submit" name="cashout">
</form>

Вот обработчик формы:
if ( $_POST['cashout'] ) {
		if ( $_POST['amount'] >= 10 ) {
			if ( $_POST['amount'] <= $balance ) {
				$payeer = new CPayeer($accountNumber, $apiId, $apiKey);
				if ($payeer->isAuth()) {

					$wallet_send = $_POST['payeer'];
					$arTransfer = $payeer->transfer(array('curIn' => 'RUB','sum' => $_POST['amount'],'curOut' => 'RUB','to' => $wallet_send,));

					
					if (empty($arTransfer['errors'])) {
						$balance_res = $balance - $_POST['amount'];
						mysqli_query($CONNECT, "UPDATE `users`  SET `balance` = $balance_res WHERE `id` = '$us_id'");
						MessageSend(2, 'Средства успешно выведены', '/cashout');
					} else {
						echo '<pre>'.print_r($arTransfer["errors"], true).'</pre>';
					}

				} else {
					echo '<pre>'.print_r($payeer->getErrors(), true).'</pre>';
				}
			} else {
				MessageSend(1, 'Недостаточно средств', '/cashout');
			}
		} else {	
			MessageSend(1, 'Минимальная сумма 10 рублей.', '/cashout');
		}
	}
  • Вопрос задан
  • 420 просмотров
Пригласить эксперта
Ответы на вопрос 2
@maxtm
Make money, not job
Скорее всего нарисовали себе баланс в аккаунте через взлом.

На первый взгляд, при условии что в $balance лежит float, проблем нет.
Но из теории заговоров - покажите var_dump от $balance

P.S. Отображать системные ошибки пользователю - bad idea.
Ответ написан
Комментировать
bingo347
@bingo347
Crazy on performance...
1. Любые данные должны поступать в запрос как данные, в sql ориентированых БД для этого есть prepared запросы
У Вас же в поля формы можно вставить sql-injection
2. Любая операция, требующая нескольких запросов на изменение данных должна быть обернута в транзакцию, если что-то пошло не так - откат
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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