Защищаем MODX Revolution

MODX Logo

Привет, друзья!


Немало статей написано и переписано о том, как защитить MODX, но в этой статье я опишу не только стандартные рекомендации по защите инстанса MODX Revolution (далее я буду писать просто MODX, потому что ветка MODX Evolution — это тупиковая ветвь «эволюции» являющаяся рудиментом не заслуживающим внимания современных разработчиков), но и некоторые новые методы «заметания следов».

Итак, начнем самого важного.

Существует две разновидности установщика MODX — это Traditional и Advanced.
Какая между ними разница?

Traditional — это простой вариант установки на любой хостинг соответствующий рекомендациям для установки MODX, где ядро устанавливается прямо в корень публичной папки сайта. Незатейливые «сайтоклёпы» ставят версию Tradtiional, не закрывают директории от просмотра и в итоге всё содержимое сайта, в т.ч. служебных директорий, попадает в индекс поисковиков. Не станем фантазировать на тему, к чему это может привести. Здесь всё понятно.

Advanced — версия для парней, которые, как минимум «смотрели кино про нидзей». Этот вид установщика позволяет разместить ядро MODX вне публичной папки, спрятав его от посягательств злоумышленников. Для серьезных проектов это рекомендуемый вариант, но лично я его использую всегда.

Защита ядра


Защитить ядро можно двумя способами:

1. На нормальном хостинге — вынести ядро из публичной папки и можно его не переименовывать и не настраивать .htaccess лежащий в этом каталоге (на VDS не стоит забывать о настройке прав доступа пользователя, от которого запускается Apache).

2. На дурацком хостинге — переименовать каталог ядра воспользовавшись, например, генератором паролей (без спецсимволов, конечно же — только буквы и цифры) И во время установки указать физический путь к каталогу ядра. Именно по этому лучше использовать Advanced установщик.

Защита служебных каталогов


Не секрет, что кроме каталога ядра, другие служебные каталоги должны остаться в публичной папке сервера.

Что нам сделать для защиты от попыток взлома через коннекторы и попыток проникнуть в админку? Стандартные наименования каталога коннекторов /connectors, а для админки — /manager, и это палево.

Во время установки вам будет предложено изменить эти названия. В этом нам поможет, правильно, — генератор паролей и, как ни странно, в случае с админкой собственная голова. Название каталога админки лучше сделать человекопонятным, но не /admin, конечно же :)

Возможно, вы захотите спросить: Почему мы не прячем /assets?
И, возможно, я отвечу: А зачем? Все картинки и скрипты лежат в /assets, а в коде страницы есть все ссылки на картинки и скрипты :)

Защита таблиц БД


Во время установки, в настройках БД, по умолчанию предлагается префикс таблиц «modx_». Так дело не пойдет. И вновь нам поможет генератор паролей (Помнишь, товарищ? Только из букв и цифр!). Меняем стандартный префикс на кракозябры, в конце которых ставим нижнее подчеркивание. Например, «IU1xbp4_».

Защита от определения CMS


Сервисы автоматического определения CMS сайтов, конечно, не в курсе, что MODX — это CMF, но это не мешает им определить, что контентом на сайте рулит именно MODX. Казалось бы, мы уже спрятали всё что надо. А вот и нет.

Первым делом, при установке MODX Revolution необходимо отключить чекбокс «X-Powered-By», который включен по умолчанию (на картинке ниже). Это необходимо для того, чтобы MODX не «палился», отправляя в заголовках информацию о том, что сайт сделан на MODX.

image

Если сайт уже установлен, то проверить этот параметр можно в системных настройках по адресу: домен_вашего.сайта/manager/?a=system/settings
И в поле «Поиск по ключу» ввести «send_poweredby_header» или просто «header» и нажать Enter на клавиатуре. Значение «send_poweredby_header» должно быть установлено как «Нет».



Также не лишним будет скрыть файлы конфигурации.
Для примера, возьмем первую ссылку из приведенного выше списка поиска Google, и попробуем открыть файл настроек config.core.php, или, не смотря на то, что на этом сайте уже закрыт листинг каталогов, по ссылке «www.vvhotel.ru/core/config/config.inc.php», сайт отдает результат исполнения файла .php, а это значить что каждый из этих файлов существует и даже по первому из них можно предположить, что сайт на MODX.

Скрыть этот файл можно при помощи .htaccess, дописав:

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^(.*)config.core.php$
    RewriteRule ^(.*)$ [R=404]
</IfModule>

Кое-что ещё


Кроме описанных приёмов, можно применить небольшую хитрость, чтобы увести возможных злоумышленников по ложному следу. Некоторые «попсовые» CMS добавляли метатэги с указанием названия CMS:

<meta name="generator" content="WordPress x.x.x" />

Можно смело добавить в свой код такой тэг, и создать фэйковую стандартную страницу входа в админку указанной версии имитируемой CMS.

Автоопределялки будут интерпретировать наш MODX как Wordpress, а если хулиганы захотят залезть в админку, то будут долго и нудно пытаться подобрать отмычки от простого замка к сканеру сетчатки глаза ( это метафора :) ).

А что, если сайт уже установлен?


В час наименьшей нагрузки, переименуйте все указанные каталоги (/core, если позволяет хостинг, лучше вынести из паблика).

Смените префикс существующих, с помощью phpMyAdmin:

  • в левой части phpMyAdmin кликаете на название нужной базы;
  • в основной области появится список всех таблиц, внизу которого надо отметить чекбокс «Отметить все»;
  • справа от чекбокса комбобокс «С отмеченными:» в котором надо выбрать «Заменить префикс таблицы»;
  • в новом окне указать старый префикс и новый префикс, на который надо заменить старый.

Затем, если у вас Traditional, но вы хотите заменить на Advanced, то поверх содержимого /core (или как вы его по-новому назвали) надо записать содержимое каталога /core из архива Advanced установщика, а в корень сайта поместить /setup.

Проверить права и доступ (на каталоги 755, на файлы 644).

Запустить процесс установки.

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

ВАЖНО выбрать вариант установки «Расширенное обновление (с настройкой параметров базы данных)», потому что после ввода данных БД, появится диалог переименования каталогов.

Можно, конечно, было залезть в config.inc.php и отредактировать всё там. Но зачем что-то делать, если этого можно не делать? :)

На этом всё. Если информация из этой статьи окажется Вам полезной — супер. Если захотите что-то спросить, добавить или просто поумничать — вэлкам в коменты!
Поделиться публикацией

Похожие публикации

Комментарии 13

    +1

    1) Поставить https, повесить basic_auth nginx на /admin и запретить работать в ней без https.
    2) 1 + создать набор из location в конфиге, по которым юзер может лазить.


    Любой из 2х.


    От себя добавлю: перенес магаз одного человека с древнего modx на свежий wordpress (woocommerce), впечатления позитивные, так как плагинов бОльше, и они развиваются. С modx была головная боль для меня (поиск плагинов и небольшая правка кода при апдейте php), и для него (аналоичных плагинов не было на свежем modx, надо были искать "кодеров"). И там ейбогу через задницу коммерция была кем-то сделана.

      0
      Про древний MODX — охотно верю :) Тем более, если это Evolution. На него не то что кодеров, на него вообще не стоит тратить время — сразу переносить.
      Я переношу на MODX Revolution. Просто для меня он более понятен и простор для полета творческой фантазии в плане программирования практически не ограничен :)

      Для примера, мы на MODX Revolution написали приложение для бухгалтерии одного банка, и систему управления сетью салонов красоты с салонами в разных часовых поясах.
      0

      Да ладно, есть под modx прекрасный магазин от Василия Наумкина, есть магазин от Николая Ланеца. Они развиваются и отлично работают.
      Плагинов (в терминологии modx дополнений) полно и они так же развиваются. Есть альтернативные каталоги таких дополнений. Самый крупный из них — https://modstore.pro
      Есть прекрасное русскоязычное сообщество https://modx.pro.
      Ну и гибкость modx даже сравнивать не стоит с вордпрессом. Хотя каждый инструмент хорош для своих задач:))

      0
      .htaccess, phpMyAdmin — этим кто-то еще пользуется?
      Зачем ядро переименовывать — не понятно.
      Как можно взломать через стандартные имена служебных каталогов — не понятно.
        0
        Как можно взломать через стандартные имена служебных каталогов — не понятно.

        Например вот так.
        По этому, лучше всё скрыть. Работы на 5 минут, зато в случае обнаружения новых «фичей» спокойнее жить.
        0
        Evolution уже умер. А тупиковой ветвью стал сам MODX. Рекомендую переходить на CMS на базе Laravel.

        Насчет защиты: достаточно закрыть доступ к /core/ (лучше на nginx) и сменить дефолтный префикс таблиц. Плюс регулярно обновлять движок. Выносить или переименовывать папку с ядром означает лишь усложнение обновления.

        Также при установке нужно отключить HTTP-заголовки с названием CMS, это важнее указания подложных мета-тегов.
          0
          Воистину. Время, когда MODX должен был выстрелить безвозвратно прошло. У проекта может быть появится еще один шанс, если они таки переедут на новую компонентную архитектуру с ядром на Slim. Но что-то десятилетний опыт работы с MODX подсказывает, что этого уже не произойдет никогда.

          Очень рекомендую October CMS.
            0
            Работаю с MODX с 2009 года и чувствую, что проект вот-вот заглохнет. Вторая версия выстрелила, но с запозданием и только в бывшем СССР. Пожалуй, это уже определило ее дальнейшую судьбу.

            Аналогично рекомендую October CMS. Особенно опытным разработчикам, которые зачем-то продолжают использовать MODX.
              0
              Именно так. А ведь хороший проект был.
            0
            Также при установке нужно отключить HTTP-заголовки с названием CMS

            Для кого-то это само собой разумеется но в статью, наверное, лучше добавить.
            Спасибо.
            0
            В час наименьшей нагрузки, переименуйте все указанные каталоги (/core, если позволяет хостинг, лучше вынести из паблика).


            Я правильно понимаю, что изменения вы предлагаете делать сразу на prodation версии?
              0
              Нет, не правильно.
              Изменения всегда нужно делать на тестовом сервере в первую очередь.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое