Невзирая на то что устаревшая Joomla! v1.5 считается уязвимой, она до сих пор находится у меня на попечении. Мне удалось не разбираясь с самой CMS защитить её от модификации кода простой установкой атрибута immutable. С тех пор много лет подряд сайт работает без каких либо патчей и изменений. Но вот вчера пришло оповещение от системы мониторинга которое вопило о проблемах с сервером где “крутится” эта CMS. Я обнаружил что один сайт порождает огромное количество процессов apache и сильно нагружает сервер. Довольно быстро этот сайт-виновник был обнаружен и отключён. Отключён потому что работал он на shared платформе и приносил проблемы доступности другим сайтам. Далее разбираясь с тем что происходит я обнаружил большое количество запросов из интернет вызывающее скрипт:
http://сайт-виновник/plugins/content/plugin_googlemap2_proxy.php
Одно только название файла наводит на понимание проблемы. А когда я заглянул в его код то у меня исчезли всякие сомнения: plugin_googlemap2_proxy.php обычный открытый прокси, который принимает в качестве параметра url адрес любого сайта и анализирует его ответ. Это называют Cross Site Scripting (XSS) уязвимостью. Отправляя множество таких запросов можно устроить атаку на удалённый ресурс ровно как и вызвать Denial-of-Service отказ самого сервера где работает сайт по причине высокой нагрузки. И если на этом сервере стоит nginx который позволяет кешировать данные то посетители такого сайта после длительного ожидания будут получать ошибку Bad Gateway.
Такое поведение скрипта plugin_googlemap2_proxy.php нужно предотвратить. Один вариант — переименовать его.
Другой на мой взгляд более правильный вариант — заблокировать его вызов по прямому url при помощи .htaccess который нужно положить прямо в каталог с плагинами
RewriteEngine On RewriteRule plugin_googlemap2_proxy.php - [F,L]
после этого прямой вызов скрипта:
http://сайт-виновник/plugins/content/plugin_googlemap2_proxy.php?url=google.com
вернёт такую ошибку:
Forbidden You don't have permission to access /plugins/content/plugin_googlemap2_proxy.php on this server.