Тут смысл в том что передавая скрипту параметр pass в виде script.php?pass[]=dsdsfsd
на стороне сервера в переменную $pass кладется массив array ( 'dsdsfsd'), но многие стандартные функции ожидают вполне конкретных типов и не готовы к приему массива. В данном случае функция если принимает массив возвращает NULL, а при сравнении типа NULL == 0 возвращается 1 (если бы было NULL === 0, то было бы иначе).
Выложил скрипт для примера тут
slus.name/hackme.php?pass[]=1
Главная проблема даже не в этой конкретной функции, многие функции могут вести себя нестандартно, выложил задачку чтобы напомнить еще раз о необходимости фильтровать все входные параметры из вне, даже если на первый взгляд они не могут нанести вреда. (даже раскрытие пути по сути своей опасно)
PS. Хабрапарсер в скрипте заменил кавычки на свои, может поэтому Ваш скрипт не отработал, а может в разных версиях по разному ведут себя скрипты.
Кстати тоже интересный вопрос.
Я часто делаю что-то типа $i=(int)$_GET['i'];
Но в исходниках одного программиста увидел конструкцию приблизительно такую
$id = (is_numeric($id))? (int)$id: false;
Неспроста ведь…
Это вопрос или тут в тоже есть уязвимость? Если второе буду ломать голову, а вообще интересный вопрос :)
Вообще я везде как минимум привожу к нужному типу из соображений «Береженого бог бережет», затраты минимальные а нервов сбережет много.
PS. тестирую соединив eth1 и eth2 сетевым кабелем и настроив интерфейсы.