- 1
- 2
- 3
- 4
- 5
- 6
$udate = mktime(
0,0,0,
$_REQUEST["udate"][3] . $_REQUEST["udate"][4],
$_REQUEST["udate"][0] . $_REQUEST["udate"][1],
$_REQUEST["udate"][6] . $_REQUEST["udate"][7] . $_REQUEST["udate"][8] . $_REQUEST["udate"][9]
);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+163.3
$udate = mktime(
0,0,0,
$_REQUEST["udate"][3] . $_REQUEST["udate"][4],
$_REQUEST["udate"][0] . $_REQUEST["udate"][1],
$_REQUEST["udate"][6] . $_REQUEST["udate"][7] . $_REQUEST["udate"][8] . $_REQUEST["udate"][9]
);
Продолжение феерической истории о том, как один мальчег не знал регулярок. Да что там регулярок...
$u = $_REQUEST["udate"]; // mm.dd.yyy
$udate = mktime( 0,0,0, $u[3] .$u[4], $u[0].$u[1], $u[6].$u[7].$u[8].$u[9] );
2) как нормально писать
если у него дата уже задана в виде mm.dd.yyy, зачем вообще нужна mktime ???
$udate = strtotime($_REQUEST[udate]);
3) автору, зачем тут регулярки, но пример бредового кода налицо... +1 ???
$timestamp = strtotime($str);
if ($timestamp===false)
echo "Строка ($str) недопустима";
preg_replace() с /e
ereg и null-байт
в $_REQUEST уже нельзя засунуть специально сформированные данные ?
Лично я - о том, что в таком случае взлом исключён, потому что регулярка задана хардкодом, и в неё из реквеста ничего не валится. Ибо я категорически затрудняюсь представить, каким боком при валидации даты может потребоваться динамически формировать регулярку, да ещё и из пользовательского ввода. Ваше слово?
теперь запускаем скрипт script.php?page=%00../../../../etc/passwd%00a
При использовании модификатора /e на конце регулярки второй аргумент функции интерпретируется как PHP-код, в котором \nnn заменяются на соответствующие совпадения. А теперь представим, что регулярка каким-то образом формируется из пользовательского ввода, а magic_quotes=off. В этом случае юзер может написать: блаблабла/e%00, где %00 - нуль-байт. Функция preg_replace проигнорит остаток строки, идущий после нуль-байта. В результате получим в корне изменившееся поведение регулярки - она теперь эвалит второй аргумент. Ну а дальше ловкость рук, суть которой в том, чтобы заставить регэксп отэвалить то, что нам надо. Недавно читал список уязвимостей phpBB ранних версий - так там очень много дыр завязано как раз на этой штуке.
Про ereg() не знаю, принципиально им не пользуюсь, ибо медленный и deprecated.