Давно хотел написать статью, посвященную безопасности сайтов на Joomla. В последнее время участились взломы сайтов на Joomla, и не только на ней. Взлому подвергаются любые CMS (например: Обнаружена опасная уязвимость в кеширующих плагинах для WordPress). Методы заражения всегда однотипные: это заражения сайтов вирусами-троянцами, установка бекдоров (backdoor). С этим бороться можно, и довольно просто. Есть ряд решений по безопасности для сайтов на Joomla. Итак, обсудим.

Безопаность сайта на Joomla стоит разделить на части:

  1. Настройка .htaccess.
  2. Настройка веб-сервера Apache.
  3. Права файловой системы.
  4. Обновление CMS Joomla.
  5. Удаление неиспользуемых расширений Joomla.
  6. Обновление расширений Joomlа.
  7. Не используйте варезные расширения.
  8. Установка расширений безопаности.
  9. Сложные пароли к учетной записи администраторов.
  10. Создание страницы 404.

Безопасная настройка сервера/хостинга

Это самая важная часть, Многие сайтостроители не задаются вопросом безопасности самого хостинга, где размещаются сайты. А это распространенное заблуждение. Это надо делать в первую очередь. Все хостинги предоставляют услугу, как есть. Только на некоторых площадках уже сделана тонкая настройка хостинга/сервера.

Используйте .htaccess

Блокировать типичные попытки эксплоита можно с помощью файла .htaccess, который должен находится в корне сайта. По умолчанию эта функция не включена на всех серверах. Используя файл .htaccess, вы сможете защитить с его помощью важные директории, например, такие, как administrator, можно блокировать доступ на сайт с определенных IP-адресов. И еще много чего можно сделать, об этом напишем чуть ниже.

Сам дистрибутив Joomla уже идет в комплекте с настроенным файлом .htaccess, остается только переименовать его из htaccess.txt в .htaccess. И начнем настройку.

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

Запрет исполнения файлов в корне сайта

## Начало - Запрет на выполнение php-скриптов в корне сайта
<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>
## Конец - Запрет на выполнение php-скриптов в корне сайта

Запрет доступа к xml-файлам расширений

## Код запрета доступа к xml-файлам расширений (раскомментируйте для активации)
<Files ~ "\.xml$">
Order allow,deny
Deny from all
Satisfy all
</Files>
## Конец кода запрета доступа к xml-файлам

Блокирование прямого доступа к ядру

Данное решение закроет доступ к бекдорам, тем самым увеличивая безопасность сайта на Joomla. По личному опыту, часто сайт заражается бекдором под названием FileMan. При удаленном вызове вы получаете полный доступ к файловой системе, вы можете изменять любые файлы, при этом оставляя дату последнего изменения, а не текущих. Нашли такие бекдоры в папке modules. Примеры:

  • /modules/mod_system/mod_system.php
  • /modules/mod_systems/mod_system.php
  • /modules/mod_article/mod_system.php
  • /modules/mod_articles/mod_system.php
  • /modules/mod_articless/mod_system.php

Создать новый файл .htaccess. Добавить инструкцию, которая указана нижне. Она запрещает выполнение скриптов. Добавить его во все папки корня сайта.

## Блокирование прямого доступа к ядру
<Files ~ ".(php)$">
 Deny from all 
 </Files>

Настройка Apache

Теперь перейдем к настройке безопасности веб-сервера Apache, он обрабатывает PHP-код и возвращает браузеру HTML-код. Его тоже надо настроить. Тут может возникнуть ряд трудностей, так как не на всех серверах есть доступ к файлу php.ini (в нем хранится конфигурация Apache). Можно попробовать сконфигурировать через .htaccess.

Установите модуль mod_security

ModSecurity – модуль Apache, добавляющий возможности обнаружения и предотвращения вторжения на Web-сервер.

К сожалению вы сами не сможете этого сделать, советуем обратиться к администрации хостинга или к администратору выделенного/вирутального сервера. Они должны установить и сконфигурировать этот модуль.

Используйте PHP версии 5.0 и выше.

Версия 4.0 уже считается устаревшей, и некоторые функции считаются небезопасными.

Не стоит бояться включить, например, версию 5.3 для Joomla ветки 1.5. CMS будет превосходно работать.

Используйте локальный php.ini

Некоторые хостинги позволяют использовать собственный файл конфигурации Apache, который находится в корне сайта. Если такая возможность есть, не упустите ее.

Настройка php.ini

Настройка простая. Вот рекомендуемые настройки безопасности Apache. Все описывать детально не буду, более подробную документацию сможете найти на сайте docs.joomla.org.

disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open
open_basedir = /home/users/you/public_html:/tmp
magic_quotes_gpc = 0
safe_mode = 0
register_globals = 0
allow_url_fopen = 1
allow_url_include = 0

Если нет возможности настроить php.ini, то можно попробовать прописать в .htaccess.

php_flag register_globals Off
php_flag file_uploads On
php_flag allow_url_fopen off
php_flag magic_quotes_gpc On
php_flag magic_quotes_runtime Off

Права в файловой системе

Если дистрибутив Joomla установлен на веб-сервере Apache с mod_php, то все виртуальные хосты на этом сервере работают в том же контексте, что и Joomla. Если файлы принадлежат другим пользователем, например «nobody» или «wwwrun», самым безопасным решением будет сменить владельца, используя FTP-клиенты (FilleZill, Total Commander и etc) и установить правильные права доступа. Они такие:

  • Корневая директория 750 (например public_html)
  • Файлы 644
  • Директории 755 (711 если вы параноик, но не для директорий, которые должны быть перечислены, например images)

Обновление CMS Joomla

Очень важный шаг. Обновить систему надо, так как разработчики периодически закрывают дырки в ядре. Например, последний билд для 1.5 является 1.5.26. Скачать релизы обновлений можно на сайте joomla.org. Там же найдете пакеты обновления и для более новых версий.

Перед обновлением обязательно создайте резервную копию всего сайта, используя инструменты, которые предоставляет хостинг или воспользуйтесь компонентом Akeeba Backup.

Удаление неиспользуемых расширений Joomla

Многие сайтостроители ставят подряд все расширения, которые находят. По большей части все они бесполезны и имеют кучу дыр, через которые злоумышленник может получить полный доступ к сайту или заразить сайт на Joomla вирусом. Так что надо определиться, нужен ли вам виджет часов на сайте? Лучше удалить неиспользуемые расширения и оставить только действительно полезные.

Обновление расширений Joomlа

Обязательно следить за релизами, особенно актуально для Joomla 1.5. В версии 1.6 и выше уже создана система репозиториев, которые позволят автоматически обновлять расширения. Одно из часто взламываемых расширений — это устаревший визуальный редактор JCE. Есть более современный, удобный и бесплатный редактор JoomlaCK для всех версий Joomla.

Не используйте варезные расширения

Часто заражения сайта на Joomla происходит через расширения, скачанные с варезных сайтов. В 100% случаев вы уже там найдете вирус. Так что ищите бесплатные аналоги у авторов, либо покупайте. Расширения не всегда дорого стоят. 10-15$ вас не разорят, зато это сделает ваш сайт более безопасным, заодно получите самую последнюю версию.

Установка расширений безопасности

Есть ряд полезных расширений для Joomla, который значительно повысит безопасность вашего сайта. Приведу их список.

  1. Admin Tools — шикарный инструмент реальной безопасности. При этом я рекомендую купить профессиональную версию (она стоит всего 20 Евро), зато вы получите почти максимальную безопасность. Сравнение версий
  2. jHackGuard — интересный плагин от SiteGround, позволяющий существенно повысить безопасность сайта. HackGuard обеспечивает защиту от таких видов взлома, как: SQL-инъекции, удаленные включения URL/файлов, удаленное выполнение кода, а также защиту от XSS-атак.
  3. AI-Bolit — Скрипт (не расширение) для поиска вирусов и вредоносных скриптов на сайте. Инструкция по его использованию — в коробке.
  4. Shell and Backdoor Script Finder — вирусный сканер сайта, у него более продвинутые базы, чем у AI-Bolit.

Сложные пароли к учетной записи администраторов

У меня есть увереность, что большинство сайтов на Joomla можно взломать с помощью пары логина admin и паролья 1234. Это недопустимая халатность. Такой пароль с логином подбирается в считанные секунды. Если вы испытываете трудности с генерацией сложных паролей, то воспользуйтесь сервисом pasw.ru.

Создание страницы «404»

Ну, об этом я писал уже дважды: Посадочная 404 страница и Как создать 404 страницу в Joomla 1.5.xx. Вы же не хотите увидеть вот такую скучную страницу:

Вот, в принципе и все. Этих нескольких простых действий достаточно, чтобы ваш сайт жил и процветал. Безопасность превыше всего.