Защити свою Joomla!

Случаи неправомерного доступа к сайту на Joomla следует пресекать на нескольких уровнях.

Пароли

Прежде всего – снизить вероятность хищения и использования злоумышленниками паролей для доступа в админку, ftp, панели управления хостингом. Правило простое: не следует хранить пароли в браузерах и ftp-клиентах. Для сокрытия адреса админки использовать AdminExile.

Так, один из моих сайтов брутфорсили через стандартный модуль входа, висящий во фронт-енде. Когда убрал модуль, начали ломиться в админку (сокрытие стояло, но секретная ссылка была простая – содержала имя домена, и ее подобрали). О брутфорсе узнал по мылу от компонента RSForm (подробности о нем – чуть ниже). Поэтому секретную ссылку делаем по-настоящему секретной, а логин администратора меняем.

Уязвимости скриптов

Сам по себе движок обновляем после выхода очередной версии, это не сложно, но настоящую опасность представляют сторонние расширения. Для людей, знакомых с php и SQL, не составит труда проверить то, как обрабатываются данные перед тем, как будет сформирован и отправлен в БД запрос, существуют ли уязвимости в скриптах, нет ли дыр в логике, особенно в части разграничения уровня доступа. На античате устраивают подобную проверку кода, и стоит это немалые деньги.

Обычным администраторам Joomla остается лишь периодически следить за обновлениями и устанавливать лишь необходимый минимум, а также установить компоненты RSFirewall и SEF. SEF поможет отрубить некоторые SQL-инъекции, а также частично скрыть определение движка по URL и метатегам. На античате так и написано: ищем уязвимые сайты по url их страниц.

sh404SEF также имеет систему анти-флуда, которая поможет снизить нагрузку на сервер при dos-атаке и отрубить брутфорс. Если это не ddos-атака, и не используются прокси-сервера, конечно. У RSFirewall есть фишка – он запоминает состояние файлов на момент сканирования и способен предупреждать в случае их изменения.

Также поможет изучение статистики счетчиков посещений. Однажды я обнаружил нецелевой трафик любителей скачать бесплатно игры и кряки по адресам, которых не должно быть именно по счетчику. Статичные html-файлы лежали в одной из директорий сервера, а ссылки на них проставлялись на различных форумах.

В другой раз – ссылки на подобные файлы были уже вшиты в шаблон сайта index.php, вместе со ссылками на другие сайты, как на мои, расположенные на этом же shared-хостинге, так и другие, причем на этом же хостинге. У сторонних сайтов стояли обратные ссылки на мои. Вот такая вот сетка сайтов, устроенная любителем стричь бабло с платных СМС. Причина была не по моей вине, а хостинга, по их словам использовалась уязвимость в gd2.

Поэтому делайте бекапы, следите за сайтами, а при взломе – уведомляйте хостера, проблема может быть не только у вас. Также добавьте сайт в вебмастер Яндекса, они пришлют уведомление о вредоносном коде на сайте. Гугл, кстати, мне не прислал. Вручную проверять можно через Вирустотал.

Защищаемся с помощью .htaccess

Копируем во все дирректории первого уровня (cache, components, images, includes, language, libraries, logs, media, modules, plugins, templates, tmp, tmp_path, xmlrpc, а также в свои созданные), кроме установочной и /administrator/ файл .htaccess следующего содержания:

.htaccess
<Files ~ ".(php)$">
Deny from all
</Files>

Так мы отрубим выполнение всех php-скриптов, и шел, даже если его залили, не запустится. В корне сайта, а также в /administrator/ в .htaccess пишем:

.htaccess
<Filesmatch ".(php)$">
order deny,allow
deny from all
</Filesmatch>
<Filesmatch "^index.php">
order allow,deny
allow from all
</Filesmatch>
<Filesmatch "^index2.php">
order deny,allow
allow from all
</Filesmatch>

Суть та же, но разрешим выполнение index.php и index2.php, они – входные точки в Joomla.

После таких манипуляций может полететь капча (а я-то думаю: почему никто не регистрируется, позже меня в социальной сети просветили). Поэтому в директории, где лежит капча (это можно узнать, посмотрев атрибут src капчи), добавляем исключение, например:

.htaccess
<Files "mycaptcha.php">
Allow from all
</Files>

Также следует добавить исключения для других своих скриптов, например, для файла process.php, если прикручена система оплаты a1agregator. Чтобы запретить администрирование злоумышленникам даже в случае кражи пароля, ограничиваем доступ по ip, более подробно об этом, а также о настройке владельцев файлов читаем тут.