Задать вопрос
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?
  • Вопрос задан
  • 1116 просмотров
Подписаться 2 Простой 4 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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р. два раза (или три, как повезет))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽