dvachek
@dvachek

Как обмануть проверяющий скрипт?

1. Имеется скрипт

$val = $_POST['val'];
$balance = 0;

function test($val, $balance){
    if(!preg_match("/^\d+(\.\d+)?$/i",$val) || $val<=0){
                return false;
    }
    if($val>$balance){
                return false;
    }
    return true;
}

var_dump(test($val, $balance));


2. Какое значение нужно передать в $_POST['val']? чтобы обмануть скрипт и было выдано true?
  • Вопрос задан
  • 1070 просмотров
Пригласить эксперта
Ответы на вопрос 3
KorniloFF
@KorniloFF
Работаю по font-end / JS
|| $val<=0
Идет сравнение без типизации данных. То есть, "ФФФ" тоже пройдет проверку.
Ответ написан
@morricone85
if(!is_numeric($val) OR (is_numeric($val) AND --условие--))
return false;

else return true;
Ответ написан
@redya69
Я думаю, что тут проблема в race condition. К примеру, на балансе 1000р. Пользователь запускает одновременно два запроса на вывод этих 1000р., оба скрипта примерно в одно время проходят проверку на наличие средств на балансе и потом спокойно себе списывают 1000р. два раза (или три, как повезет))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 23:39
3000 руб./за проект
30 апр. 2024, в 23:32
1500 руб./за проект
30 апр. 2024, в 22:44
500 руб./в час