Безопасность сайтов на Joomla или как бороться с вирусами на сайте

Решение проблем и повышения бе безопасности веб сайтов

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

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

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

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

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

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

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

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

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

Устанавливаем индексный файл

Первым должен идти исполняемый файл, например index.php.

#Устанавливаем индексный файл
DirectoryIndex index.php index.html index.htm

Запрет выдачи листинга пустого каталога

Запрещаем показ содержимого каталога, если нет индексного файла.

#Запрет выдачи листинга пустого каталога
Options -Indexes

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

# Начало - Запрет на выполнение 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.

Повышаем безопасность сайта

Для более тонкой настройки безопасности сайта и защиты от фишинга, вставляем следующий код в php.ini или в конфигурацию Apache:

<IfModule mod_headers.c>
    #Запрещаем встраивать сайт во iframe
    Header always append X-Frame-Options SAMEORIGIN
    #Защищаем сайт от межсайтового скриптинга
    Header set X-XSS-Protection "1; mode=block"
    #Заголовок предотвращает атаки на основе mime
    Header set X-Content-Type-Options nosniff
    #Браузер отправляет полный URL на тот же сайт, и неполный (только название) на все остальные
    Header set Referrer-Policy origin-when-cross-origin
</IfModule>

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

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

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

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

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

Не стоит бояться включить, например, версию 5.6.40 для 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 = 0
allow_url_include = 0
mail.add_x_header = 0
error_reporting = E_ERROR

Если нет возможности настроить 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
php_flag mail.add_x_header Off
php_flag error_reporting E_ERROR

Директива mail.add_x_header в каждом отправляемом письме добавляет заголовок X-PHP-Originating-Script, который содержит UID и имя скрипта отправляющего письмо. Это позволяет злоумышленнику узнать от какого пользователя работает PHP. Лучше отключим.

Директива error_reporting сообщает PHP, что в логи писать информацию только об ошибках. В некоторых CMS и расширениях для них имеют кучу notice и warning, что может привести к росту файлов логов и место на винчестере просто закончится. Это закончится тем, что сайт будет не доступен.

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

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

Пример смены прав в TotalCommander

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Неправильная 404 страница

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

Начать проект вместе с нами
Заполните форму и отправьте
нам сообщение!
Если у Вас возникли вопросы, предложения, либо Вы желаете оформить заявку на заказ услуги — Добро пожаловать!
Контакты:
Бронзовые партнеры October CMS:
Chris standing up holding his daughter Elva