Математический тренажёр и его уязвимости
Код:
//Проверка по рег. выражению. Если формат неправильный, то просто заменяем переменную на пример 0 + 0
if (!preg_match("|^[0-9]{1,3}\s\+\s[0-9]{1,3}$|", $_POST["example"])) {$_POST["example"] = "0 + 0";}
eval("\$rez = ".$_POST["example"].";"); //Решаем пример
if ($rez == $_POST["rezult"]) //Сравниваем своё решение с решением юзера и выдаём соотв. результат
{
echo "<font color=\"#00ff00\"><b> + </b></font>\n";
}
else
{
echo "<font color=\"#ff0000\"><b>".$rez."</b></font>\n";
}
if (!preg_match("|^[0-9]{1,3}\s\+\s[0-9]{1,3}$|", $_POST["example"])) {$_POST["example"] = "0 + 0";}
eval("\$rez = ".$_POST["example"].";"); //Решаем пример
if ($rez == $_POST["rezult"]) //Сравниваем своё решение с решением юзера и выдаём соотв. результат
{
echo "<font color=\"#00ff00\"><b> + </b></font>\n";
}
else
{
echo "<font color=\"#ff0000\"><b>".$rez."</b></font>\n";
}
Здесь $_POST["example"] - это сам пример, а $_POST["rezult"] - его решение.
Вопрос в том, всё ли я предусмотрел? Как ещё можно ковырнуть мой скрипт, чтобы нагадить?
P.S. Весь код лежит здесь.
Не легче разбить строку на эти два числа и просто их сложить без всякого eval() ?
Вообще-то, я планировал добавить туда ещё вычитание.
Цитата:
Чтобы заставить скрипт решать им же придуманный пример
Им же придуманный, это как?
ссылку на весь скрипт) случайно выдаёт числа и отправляет их пользователю.
Он в другом месте (я ужe давал
Цитата:
Вопрос в том, всё ли я предусмотрел? Как ещё можно ковырнуть мой скрипт, чтобы нагадить?
А, в принципе, кому и зачем гадит-то?
Ведь ничего скрытного не достать,
и ничего не испортить, не так ли?
Цитата: Tingo
Ведь ничего скрытного не достать,
и ничего не испортить, не так ли?
Если этот скрипт вывесить в общий доступ и разрешить выполнять на своём сервере, то есть вероятность, что кому-то захочется передать eval'у что-нибудь интересное, вроде рекурсивного удаления файлов и папок.