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?
  • Вопрос задан
  • 1086 просмотров
Пригласить эксперта
Ответы на вопрос 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р. два раза (или три, как повезет))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы