- 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]
);
Продолжение феерической истории о том, как один мальчег не знал регулярок. Да что там регулярок...
Death 25.02.2010 14:14 # +1
$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 ???
Johnny 25.02.2010 17:10 # −0.2
Death 25.02.2010 18:40 # 0
Johnny 25.02.2010 19:46 # −0.2
Death 25.02.2010 19:50 # 0
$timestamp = strtotime($str);
if ($timestamp===false)
echo "Строка ($str) недопустима";
Johnny 25.02.2010 20:20 # −0.2
Death 25.02.2010 20:24 # 0
Johnny 25.02.2010 21:10 # +0.8
xXx_totalwar 25.02.2010 19:38 # 0
preg_replace() с /e
ereg и null-байт
Johnny 25.02.2010 19:46 # 0
guest 25.02.2010 21:39 # +1
Johnny 25.02.2010 22:10 # 0
guest 26.02.2010 06:02 # 0
в $_REQUEST уже нельзя засунуть специально сформированные данные ?
xXx_totalwar 26.02.2010 11:59 # 0
guest 27.02.2010 00:17 # +2
Лично я - о том, что в таком случае взлом исключён, потому что регулярка задана хардкодом, и в неё из реквеста ничего не валится. Ибо я категорически затрудняюсь представить, каким боком при валидации даты может потребоваться динамически формировать регулярку, да ещё и из пользовательского ввода. Ваше слово?
Johnny 27.02.2010 10:17 # 0
xXx_totalwar 27.02.2010 11:04 # +2
теперь запускаем скрипт script.php?page=%00../../../../etc/passwd%00a
guest 27.02.2010 11:10 # +1
При использовании модификатора /e на конце регулярки второй аргумент функции интерпретируется как PHP-код, в котором \nnn заменяются на соответствующие совпадения. А теперь представим, что регулярка каким-то образом формируется из пользовательского ввода, а magic_quotes=off. В этом случае юзер может написать: блаблабла/e%00, где %00 - нуль-байт. Функция preg_replace проигнорит остаток строки, идущий после нуль-байта. В результате получим в корне изменившееся поведение регулярки - она теперь эвалит второй аргумент. Ну а дальше ловкость рук, суть которой в том, чтобы заставить регэксп отэвалить то, что нам надо. Недавно читал список уязвимостей phpBB ранних версий - так там очень много дыр завязано как раз на этой штуке.
Про ereg() не знаю, принципиально им не пользуюсь, ибо медленный и deprecated.
Johnny 27.02.2010 11:22 # 0
xXx_totalwar 27.02.2010 11:14 # 0