Ребят, приветствую. На сайте случалась ситуация, что один из пользователей смог обойти проверку и украсть средства. После просмотра, увидел, что у пользователя в базе был отрицательный баланс. Просьба, помочь и навести на мысль, заранее премного благодарен.
PHP:
$user = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT * FROM `users` WHERE `login` = '$_SESSION[USER_LOGIN]'"));// сессия присваивается после авторизации
$balance = $user['balance'];//переменная с данными пользователя
if ( isset($_POST['cashout']) ) {
if ( $_POST['amount'] >= 10 ) {
if ( $_POST['amount'] <= $balance ) {
// Здесь скрипт выполняющий вывод средств и обновляющий баланс в БД
$balance_res = $balance - $_POST['amount'];
mysqli_query($CONNECT, "UPDATE `users` SET `balance` = $balance_res WHERE `id` = '$us_id'");
MessageSend(2, 'Средства успешно выведены', '/cashout');
} else {
MessageSend(1, 'Недостаточно средств', '/cashout');
}
} else {
MessageSend(1, 'Минимальная сумма 10 рублей.', '/cashout');
}
}
Форма:
<form action="/cashout" method="POST">
Кому: <input type="text" class="form-control" name="payeer" placeholder="Payeer кошелек">
Сколько: <input type="number" name="amount" class="form-control" placeholder="Сумма в рублях">
<input type="submit" name="cashout" value="Cash Out">
</form>
Неявное пребразование типов. Вот пример
<?php
$ammount=' 050w00';
$balance='40'; //<-- важно, что это строка
if($ammount>=10){
if($ammount<=$balance){
$balance=$balance-$ammount;
}
}
print('balance:'.$balance);
balance:-10
Возможно подмена сессионных данных $_SESSION[USER_LOGIN] на другое имя с положительным балансом а вывод и update таблиц иже идет у Вас по id.
Не видно еще кода, когда в массив записывается стояния кошелька, $user['balance']
Может дело в том что у вас всё это не в транзакции? Пользователь взял, подготовил запрос, 4 штуки, они всё в одну секунду проверили баланс, он положительный, и списали, вот у вас и минус
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Дан список студентов, необходимо сделать выборку и вывести список студентов которые проживают в общежитии и получают стипендиюКак искать...
Есть массив, который очень быстро пополняется значениями и из него удаляются все значенияМне нужно что бы в определенный момент(я сам знаю...
Есть Laravel Middleware, который должен перенаправлять если пользователь не залогинен со следсодержимым:
Пробую разобраться в админке sleepingowlГде-то запарился, подскажите что не сделал