Как защитить MODX Revolution от возможных взломов

Статья о том, как своими ручками усилить защиту сайта на MODX

На этапе инсталляции системы

1) Обязательно меняйте префиксы таблиц базы данных (advanced дистрибутив MODX), это создаст проблем хакеру использующему SQLi.

По умолчанию при установке MODX префикс указан: modx_ - меняйте его на что-нибудь персональное, например:

  • revo_ (не самый оригинальный вариант)
  • mmm_
  • sd_
  • ivan_
  • cmf_
  • #@!_

Потому, что когда через слабозащищённые модули принимающие информацию вводимую пользователем вам будут пихать SQL инъекции, в первую очередь будут долбить в modx_users

2) Переопределяйте пути к папкам:

  • /manager/
  • /connectors/
  • /core/

Опция переопределения путей имеется в дистрибутиве MODX типа advanced, в traditional такой опции нет. Это именно те места, где хакеры будут искать уязвимые скрипты и будут стараться обращаться к ним напрямую. Большую опасность представляет даже не папка /manager/, а /connectors/.

На уже действующей системе

Можно закрыть к пикантным разделам доступ по IP адресу, если вы заходите всё время только с определённых адресов. Это серьёзно усилит вашу оборону.

Содержимое файла .htaccess тривиально (гуглится надёжно).

RewriteEngine Off

Order deny,allow
deny from all
Allow from 159.198.14.84	# home
Allow from 160.198.14.84	# work
Allow from 161.198.14.84	# cafe

Соответственно будет защищено всё, что лежит в одной папке с этим файлом и глубже. Такой файлик можно спокойно класть в /manager/, /connectors/ и /core/. Разве что персонально для /core/ можно запретить прямое обращение к php файлам, добавив:

IndexIgnore */*

<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>

эта мера совершенно не помешает в качестве "перестраховаться".

Но если Вы часто обращаетесь к админке своего сайта из разных мест, ездите с ноутбуком по клиентам, конференциям, то задачу можно усложнить. Давать доступ или по IP или по базовой аутентификации через .htpasswd

Для /manager/ и /connectors/

RewriteEngine Off

Order deny,allow
Deny from all
AuthName "htaccess password prompt"
# здесь нужно указать абсолютный путь к файлу .htpasswd
# он вполне может быть общим для всех сайтов на одном хостинге
# файл .htpasswd нужно отдельно генерировать, об этом далее в статье
AuthUserFile /home/askapache.com/.htpasswd 
AuthType Basic
Require valid-user
Allow from 127.0.0.1
Allow from 192.168.1.1
Satisfy Any

Для /core/

IndexIgnore */*

<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>

Order deny,allow
Deny from all
AuthName "htaccess password prompt"
AuthUserFile /home/askapache.com/.htpasswd
AuthType Basic
Require valid-user
Allow from 127.0.0.1
Satisfy Any

У этого подхода две стороны медали.

Плюсы: Вы получаете требуемую мобильность. Дополнительный пароль не надо вводить в местах, ip которых вы внесли в разрешённые.

Минусы: У злоумышленника удалённого от вас - всё таки остаётся возможность подобрать пароль и получить доступ к вашим "интимным местам"

Генерация htpasswd

Если у Вас есть ssh-доступ на сервер (доступ к командной строке сервера), то Вы можете воспользоваться утилитой htpasswd. Синтаксис команды таков:

htpasswd -c /full/path/.htpasswd имя_пользователя

После ввода команды будет запрошен пароль и просьба его повторить. В результате будет создан новый файл .htpasswd или же дополнен старый, содержащий логин и зашифрованный пароль. Если Вы хотите добавить новых пользователей, то следует запустить команду с ключом:

htpasswd -m .htpasswd имя_пользователя

В результате в существующий файл с паролями будет добавлена новая строка с именем пользователя и паролем.

Если у Вас нет доступа по ssh, а вероятно только по ftp, то для генерации файла htpasswdможно воспользоваться любым онлайн генератором, например htaccesstools

Общие советы

Изучите систему управления правами доступа MODX. Давайте контент-менеджерам прав ровно столько, сколько им нужно, не больше, со временем если понадобится - добавите.

И в принципе регулярно проверяйте журналы ошибок на предмет подозрительного и кто у вас там вообще на сайте админами числится, а то бывают случаи появляются админы с e-mail'ами типа: willfuckyourmodxrevolutionagain@gmail.com (хер там, больше не выйдет )))

P.S.

Почему я написал эту статью? В ночь с 5 на 6 марта взломали один из сайтов моих клиентов. Сайт на MODX. Хочу заметить, что этого бы не случилось, если бы они обновляли ПО своего сайта регулярно. На поиск истории взлома, удаление вредоносного кода, обновление ПО и построение дополнительной защиты у меня ушло в сумме 1,5 часа - не так и много по сравнению с вредом, который мог быть нанесён злоумышленником. Не ленитесь - сделайте.

Update 01.04.2014

написал скрипт-обманку пишущий в журнал попытки перебора админок разных CMS.

Удачи!