Вот так случилось что все выходные я с переменным успехом боролся со взломами на православном сайте http://pravoslavie-omsk.ru/. Злодеи пытались запустить какието очень страшные вещи на моем сервере :)
В результате был разработан метод правки бага древней версии mambo.cms который давал хакеру возможность запустить скрипт со стороннего сервера подменой вложения системных файлов:
поясню: используя GET запрос из комбинации глобальных переменных и системных переменных: GLOBALS, _REQUEST, mosConfig_absolute_path злоумышленник без труда запускал хакерскую утилиту на своем (в кавычках, тоже взломанном) сервере, которая содержала ряд инструментов для взлома и давала доступ к файловой системе сервера.
так Вот появилась задача, как бы так етого хакера присмерить, чтобы не обновлять версию mambo (так как там уже в ней столько своего написано, что если обновить, все политит). Почесал репку и нашел универсальный метод победить супостата
используем настройки сервера и файл .htaccess и модуль mod_rewrite составил такую инструкцию:
RewriteCond %{THE_REQUEST} /(.*)mosConfig_absolute_path(.*)$ [NC,OR]
RewriteCond %{THE_REQUEST} /(.*)REQUEST(.*)$ [NC,OR]
RewriteCond %{THE_REQUEST} /(.*)GLOBALS(.*)$ [NC]
RewriteRule . -[F]
Что же она делает?
Эта инструкция содержит регулярное выражение, которое проверяет в адресной строке запроса вхождения вышеуказанных переменных и в случае их обнаружения выкидывает злоумышленнику 404 ошибку
[показать]
Все злоумышленник больше никогда не проникнет на Ваш сервер, если конечно не успел забрутофорсить пароли FTP той самой утилитой
В принципе такой нехитрый способ защиты подойтет не только для mambo cms, но и для любой системы управления или форума или скрипта, да и вообще как способ защиты от подмены глобальных переменных без их отключения (register_globals ON)