Modx htaccess core
Стандартный .htaccess для MODX
Оригинальный файл .htaccess для MODX будет полезен в том случае, если вы его случайно удалили или некорректно отредактировали.
О MODX
«MODX – это профессиональный многофункциональный инструмент, предназначенный для разработки сайтов, позволяющий управлять как контентом на сайте, так и самим сайтом в целом! Использование MODX полностью бесплатно».
— modx.com
Исходный код
Содержимое стандартного файла .htaccess для CMS MODX Revolution 2.
# MODX supports Friendly URLs via this .htaccess file. You must serve web
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODX.
# E.g., «/modx» if your installation is in a «modx» subdirectory.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]
# Rewrite www.domain.com -> domain.com — used with SEO Strict URLs plugin
#RewriteCond % .
#RewriteCond % !^example-domain-please-change.com [NC]
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# DO NOT USE BOTH
#
#RewriteCond % .
#RewriteCond % !^www.example-domain-please-change.com [NC]
#RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
# https://www.domain.com when your cert only allows https://secure.domain.com
#RewriteCond % !^443
#RewriteRule (.*) https://example-domain-please-change.com/$1 [R=301,L]
# The Friendly URLs part
RewriteCond % !-f
RewriteCond % !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
# Make sure .htc files are served with the proper MIME type, which is critical
# for XP SP2. Un-comment if your host allows htaccess MIME type overrides.
#AddType text/x-component .htc
# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP’s register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for «register_globals». The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.
#php_flag register_globals Off
# For servers that support output compression, you should pick up a bit of
# speed by un-commenting the following lines.
#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5
# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they’re in place, you may have
# to do a force-refresh in order to see changes in your designs.
#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch «MSIE» brokenvary=1
#BrowserMatch «Mozilla/4.[0-9]<2>» brokenvary=1
#BrowserMatch «Opera» !brokenvary
#SetEnvIf brokenvary 1 force-no-vary
Содержимое стандартного файла .htaccess для CMS MODX Evolution 1.
# For full documentation and other suggested options, please see
# http://svn.modxcms.com/docs/display/MODx096/Friendly+URL+Solutions
# including for unexpected logouts in multi-server/cloud environments
# and especially for the first three commented out rules
#php_flag register_globals Off
#AddDefaultCharset utf-8
#php_value date.timezone Europe/Moscow
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Fix Apache internal dummy connections from breaking [(site_url)] cache
RewriteCond % ^.*internal dummy connection.*$ [NC]
RewriteRule .* — [F,L]
# Rewrite domain.com -> www.domain.com — used with SEO Strict URLs plugin
#RewriteCond % .
#RewriteCond % !^www.example.com [NC]
#RewriteRule (.*) http://www.example.com/$1 [R=301,L]
# Exclude /assets and /manager directories and images from rewrite rules
RewriteRule ^(manager|assets)/*$ — [L]
RewriteRule .(jpg|jpeg|png|gif|ico)$ — [L]
Modx htaccess core
1) Обязательно меняйте префиксы таблиц базы данных (advanced дистрибутив MODX), это создаст проблем хакеру использующему SQLi.
По умолчанию при установке MODX префикс указан: modx_ — меняйте его на что-нибудь персональное, например:
- revo_ (не самый оригинальный вариант)
- mmm_
- sd_
- ivan_
- cmf_
- #@!_
Потому, что когда через слабозащищённые модули принимающие информацию вводимую пользователем вам будут пихать SQL инъекции, в первую очередь будут долбить в modx_users
2) Переопределяйте пути к папкам:
Опция переопределения путей имеется в дистрибутиве MODX типа advanced, в traditional такой опции нет. Это именно те места, где хакеры будут искать уязвимые скрипты и будут стараться обращаться к ним напрямую. Большую опасность представляет даже не папка /manager/, а /connectors/.
На уже действующей системе
Можно закрыть к пикантным разделам доступ по IP адресу, если вы заходите всё время только с определённых адресов. Это серьёзно усилит вашу оборону.
Содержимое файла .htaccess тривиально (гуглится надёжно).
Соответственно будет защищено всё, что лежит в одной папке с этим файлом и глубже. Такой файлик можно спокойно класть в /manager/, /connectors/ и /core/. Разве что персонально для /core/ можно запретить прямое обращение к php файлам, добавив:
эта мера совершенно не помешает в качестве «перестраховаться».
Но если Вы часто обращаетесь к админке своего сайта из разных мест, ездите с ноутбуком по клиентам, конференциям, то задачу можно усложнить. Давать доступ или по IP или по базовой аутентификации через .htpasswd
Для /manager/ и /connectors/
Для /core/
У этого подхода две стороны медали.
Плюсы: Вы получаете требуемую мобильность. Дополнительный пароль не надо вводить в местах, ip которых вы внесли в разрешённые.
Минусы: У злоумышленника удалённого от вас — всё таки остаётся возможность подобрать пароль и получить доступ к вашим «интимным местам»
Генерация htpasswd
Если у Вас есть ssh-доступ на сервер (доступ к командной строке сервера), то Вы можете воспользоваться утилитой htpasswd. Синтаксис команды таков:
После ввода команды будет запрошен пароль и просьба его повторить. В результате будет создан новый файл .htpasswd или же дополнен старый, содержащий логин и зашифрованный пароль. Если Вы хотите добавить новых пользователей, то следует запустить команду с ключом:
В результате в существующий файл с паролями будет добавлена новая строка с именем пользователя и паролем.
Если у Вас нет доступа по ssh, а вероятно только по ftp, то для генерации файла htpasswdможно воспользоваться любым онлайн генератором, например htaccesstools
Общие советы
Изучите систему управления правами доступа MODX. Давайте контент-менеджерам прав ровно столько, сколько им нужно, не больше, со временем если понадобится — добавите.
И в принципе регулярно проверяйте журналы ошибок на предмет подозрительного и кто у вас там вообще на сайте админами числится, а то бывают случаи появляются админы с e-mail’ами типа: willfuckyourmodxrevolutionagain@gmail.com (хер там, больше не выйдет )))
Почему я написал эту статью? В ночь с 5 на 6 марта взломали один из сайтов моих клиентов. Сайт на MODX. Хочу заметить, что этого бы не случилось, если бы они обновляли ПО своего сайта регулярно. На поиск истории взлома, удаление вредоносного кода, обновление ПО и построение дополнительной защиты у меня ушло в сумме 1,5 часа — не так и много по сравнению с вредом, который мог быть нанесён злоумышленником. Не ленитесь — сделайте.
5 способов обезопасить сайт на MODX
28 февраля 2016
Разработчики MODX Revolution постоянно ведут работу над улучшением безопасности создаваемой ими системы. Тем не менее, со стороны создателя сайта тоже должны быть приложены определённые усилия, чтобы безопасность сайта оставалась на должном уровне.
Несмотря на то, что никто не может гарантировать абсолютной защиты, в наших силах усложнить злоумышленникам задачу по усложнению вашей жизни. И в этой статье я расскажу о простых, но эффективных способах защитить свой сайт.
1 Перемещение ядра
Начиная с версии 2.4 MODX выводит на главной странице панели предупреждение, если каталог ядра находится в открытом доступе. Несмотря на это, данный совет является актуальным для любого веб-проекта — ядро приложения должно располагаться в максимально недоступном для злоумышленников месте.
Чем грозит расположение каталога ядра в доступном месте?
- Злоумышленник может узнать версию MODX (https://site.ru/core/docs/changelog.txt) и использовать данную информацию для поиска соответствующих уязвимостей.
- Злоумышленник может получить информацию об установленных дополнениях (https://site.ru/core/packages/).
- Злоумышленник может скачать пакеты дополнений (https://site.ru/core/packages/core.transport.zip), особенно обидно, если они платные.
- Если вдруг возникнет такая проблема в работе сервера, когда php-файлы перестанут исполняться, а вместо этого станут отображаться «как есть», то злоумышленнику ничего не стоит узнать доступы к базе данных.
Решение
Давайте рассмотрим это на простом примере. Допустим, сайт расположен по следующему адресу:
В этом каталоге можно увидеть файлы index.php, .htaccess, config.core.php и каталоги assets, connectors, core.
Как видим, ядро MODX лежит здесь:
Проблема в том, что каталог core находится на одном уровне с файлами, доступными обычным посетителям сайта. Самый простой вариант решения проблемы — перенос каталога с ядром MODX выше по дереву файловой системы. Сделать это проще всего по SSH или с помощью файлового менеджера, предоставляемого хостингом или панелью управления вроде ISP Manager. Итак, после перемещения каталога ядра его новым расположением будет следующий путь:
Важно после данных манипуляций обновить файлы конфигурации MODX, указав в них новый путь до ядра MODX. Список файлов следующий:
- config.core.php
- connectors/config.inc.php
- core/config/config.inc.php
- manager/config.inc.php
Как раз недавно я случайно наткнулся с данной проблемой на одном сайте, который работал на какой-то CMS (если это творение вообще можно назвать CMS), написанной на коленках во время концерта Стаса Михайлова.
2 Изменение адреса панели
Обычно административная панель сайта на MODX находится по адресу https://site.ru/manager. Немного замести следы пребывания MODX помогает перемещение админки, а сделать это проще простого — достаточно переименовать сам каталог (например, из manager в admin или abrakadabra), а затем указать новый путь в одном файле конфигурации:
3 Обновляйте дополнения
Даже если функционал текущих версий дополнений полностью устраивает, это ещё не значит, что нет причин для обновлений. Как известно, новые версии ПО несут с собой не только новые возможности, но и различные исправления ошибок (хотя новые ошибки тоже обычно идут в комплекте).
4 Обновляйте MODX
Как я уже писал выше, разработчики MODX постоянно работают над обеспечением безопасности MODX, поэтому рекомендуется периодически обновлять MODX до последнего стабильного выпуска.
5 Разделяй и властвуй
Если над сайтом работает несколько человек, то крайне рекомендуется настроить для каждого пользователя минимально необходимые права доступа. Ведь нет никакого смысла в том, чтобы контент-менеджер имел доступ к настройкам системы или сниппетам с чанками.
Даже если у контент-менеджера не зачешутся ручки, чтобы поковыряться в работе системы, может объявиться злоумышленник, который, воспользовавшись некомпетентностью пользователя, сможет перехватить доступ в админку. Это особенно актуально, если работа с сайтом ведётся через незащищённое соединение, вследствие чего логин и пароль передаётся по сети в открытом виде. Для уменьшения риска перехвата пароля рекомендуется приобрести и установить SSL-сертификат, тогда все запросы будут передаваться в зашифрованном виде.
MODX Revo — Ввод названия сайта и настройка ЧПУ
Второй урок по созданию блога на MODX Revolution. На этом уроке мы введём название для сайта и научимся настраивать ЧПУ в CMS MODX Revolution.
Ввод названия сайта
Ввод названия сайта производится в окне «Настройка системы». Чтобы в неё зайти необходимо нажать на значок «Шестерёнки» и выбрать в открывшемся меню пункт «Настройка системы».
Так как MODX содержит большое количество настроек, то рекомендую пользоваться фильтрами для отбора нужных параметров (например, параметр «Название сайта» находится в разделе «Сайт»). После выбора фильтра «Сайт» переходим к изменению параметра «Название сайта», для этого необходимо в соответствующем поле ввести нужное название (например: «Мой блог»).
Примечание: Сохранять или подтверждать изменения параметров системы в MODX Revolution не требуется.
Настройка ЧПУ для сайта
Но перед тем как переходить к настройке ЧПУ, давайте разберёмся что означает этот термин.
Понятие ЧПУ
ЧПУ – это понятный для человека веб-адрес страницы сайта, т.е. тот который Вы видите в адресной строке браузера.
Этот адрес содержит страницу (ресурс), которая имеет идентификатор 2 во внутренней структуре CMS MODX Revolution. Такая запись не является понятным пользователю, да и поисковым машинам Google и Yandex она не очень понятна, что в итоге может привести к более низким позициям при выдаче сайта в этих системах.
Совсем другое дело, когда адрес веб-страницы выводится с помощью ЧПУ, такой адрес отражает понятную для человека иерархию данных на сервере, например:
http://mysite.ru/articles/bootstrap-3/labels-and-icons
Данный адрес отображает страницу «labels-and-icons», которая находится в контейнере «bootstrap-3», а он, в свою очередь, содержится в контейнере «articles».
Настройка файла .htaccess для ЧПУ
Настройка веб-сервера для работы с ЧПУ осуществляется посредством конфигурационного файла .htaccess :
- Переименовываем файл ht.access в .htaccess .
- Открываем файл .htaccess , находящийся в корневой директории MODX (например, в » z:homemysite.ruwww «) с помощью текстового редактора.
- Проверяем, чтобы 3 следующие строчки, идущие после комментария (The Friendly URLs part), были разкомментированы: Эти строчки обеспечивают интерпретацию адресов index.php?q=idРесурса в ЧПУ на сервере.
Для работы вышеприведённых преобразований в файле .htaccess должна быть включена (до вышеприведённых строчек) директива RewriteEngine . - Кроме этого сразу же можно настроить ещё одно преобразование, которое будет выполнять редирект с www.домен на домен или обратно (с домен на www.домен ). Это осуществляется в зависимости от того, какое имя имеет ваш сайт, а именно с www или без www .
- Изменяем строчку example-domain-please-change на имя домена, в нашем случае на mysite . А строку com на ru . Так же не забываем убрать знак # , чтобы раскомментировать данные строки. После выполнения вышеперечисленных действий эти строки должны выглядеть следующим образом:
- Сохраняем изменения в файле.
Настройка параметров системы MODX Revolution для ЧПУ
Для настройки ЧПУ в CMS MODX Revolution необходимо перейти в раздел «Настройка системы» и в поле «Фильтр по разделу. » выбрать из списка пункт «Дружественные URL».
В открывшейся таблице необходимо изменить значения следующих параметров:
- Использовать дружественные URL -> Да.
- Проверять на дублирование URI во всех контекстах -> Да.
- Использовать вложенные URL -> Да. Данный параметр рекомендую использовать, т.к. в этом случае в URL адрес будут включаться названия всех контейнеров на пути к выводимому ресурсу, что будет более наглядно и для веб-разработчика и для посетителей сайта. Также при использовании данного параметра необходимо применять либо полные пути к файлам (изображения, css, javascript и т.д.), либо использовать тег ( ) в заголовке веб-страницы.
- Строгий режим дружественных URL -> Да. Данный параметр тоже рекомендую использовать, т.к. это исключит дублирование контейнеров (например: mysite.ru/article/ и mysite.ru/article ).
- Автоматически генерировать псевдонимы ->Да. Данному параметру необходимо установить значение «Да», если вы не хотите вручную вводить alias для ресурсов, которые вы будете создавать.
Примечание: Для автоматической транслитерации псевдонимов необходимо установить пакет «yTranslit» или «translit».
- Транслитерация псевдонимов -> russian . Данный параметр установите в russian , если на сайте Вы хотите использовать транслитерацию для псевдонимов ресурсов (например: mysite.ru/статьи/ -> mysite/articles ).
В итоге для настройки ЧПУ в CMS MODX Revolution мы выполнили следующие действия:
Перенос сайта с Modx revolution на хостинг
Modx revolution использует в своей работе базу данных и для переноса её на другой сервер кроме файлов необходимо так же переносить и базу данных. Так же modx использует кеширование, что так же не стоит упускать из виду при переносе.
Удалите кеш и сбросьте сессии
Прежде чем начать что-то делать, необходимо очистить все данные, которые могут кешироваться.
В случае необходимости так же удалить файлы из каталога core/cache.
Запакуйте ваши файлы
Каждый раз, когда вы собираетесь переносить большое количество файлов на другой сервер, желательно упаковать файлы в архив. Это так же как с квартирой: при переезде вы упаковываете вещи в коробки а не переносите по одной. Плюс перенося файлы в архиве, вы не потеряете при переносе ни одного файла. 1 файл на 100 мегабайт переносить с одного сервера на другой на много быстрее, чем 100 файлов по мегабайту.
На UNIX системе вы можете заархивировать файлы следующей командой:
Далее перенесите файлы на новый сервер. В новом месте предварительно лучше создать отдельную папку для архива. Идея в том, что если вы распакуете архив в отдельной папке, вы не сможете перепутать файлы modx с другими файлами вашего сервера. В UNIX системе вы можете распаковать файлы следующей командой: После того, как вы распакуете файлы, вы можете перенести их в нужное место командой mv, либо при помощи встроенного файлового менеджера mc.
Изменение владельца на файлы
Иногда права пользователя и группы на файл могут меняться при переезде с одного сервера на другой. Вам нужно проверить права на файлы. Все файлы modx на новом сервере должны принадлежать новому владельцу. Изменить права на файлы вы можете командой chown. При копировании по FTP , в большинстве случаев, таких проблем не возникает.
Права на запись: 777 или 755?
Некоторые папки modx на сервере должны иметь права на запись. В зависимости от настроек безопасности это права 777, либо 755. При переносе файлов архивом tar.gz все права на файлы и папки остаются не измененными и это может не работать корректно на новом сервере. Изменить права на файлы и папки можно командой chmod.
Копирование базы данных
Modx Revolution может работать на нескольких драйверах баз данных — mysql и sqlsrv. Следующая часть написана для драйвера mysql, но вы можете делать так же на драйвере sqlsrv.
Вы можете сделать бэкап вашей базы данных при помощи таких графических интерфейсов как phpmyadmin, либо можете воспользоваться следующей утилитой mysqldump:
Если вы используете утилиту mysqldump, убедитесь, что пользователь имеет полные права на базу данных modx. Самый просто вариант это использовать того же пользователя, которого использует modx. Посмотреть данные этого пользователя можно в файле /core/config/config.inc.php. Обратите внимание, что mysqldump потребует от вас пароля mysql пользователя, но при вводе на экране ничего отображаться не будет.
На новом сервере, для импорта, вы можете использовать средства phpmyadmin, либо следующую команду:
Обновление файла конфигурации
После того, как вы развернули файлы и базы данных на новом сервере, необходимо обновить файлы конфигурации. Откройте файл core/config/config.inc.php и впишите актуальные значение в следующие строки:
Есть так же три дополнительных файла содержащих php константы, которые нужно поправить: в файлах:
Убедитесь, что вы правильно указали пути во всех этих файлах.
Обновление базы данных
Modx сохраняет некоторые пути в базе данных. При переносе modx на другой сервер, вам необходимо обновить пути в базе данных, иначе на сайте будет отображаться белая страница.
Обратите внимание, что может использовать разные драйвера баз данных. Следующая информация описывает работу с mysql, но вы можете сделать тоже самое с драйвером sqlsrv.
Чтобы увидеть информацию о пути, который хранится в базе данных MODx, введите следующий запрос в PhpMyAdmin, утилите mysql, или любоv другого приложении, которое позволяет выполнять запросы к базе данных:
Измените «your_revo_db» на имя вашей базы данных и при необходимости укажите префикс таблиц(на пример «modx_workspaces»). Если пути на новом сервере отличаются от старых, то вам необходимо обновить их. Вы можете обновить их при помощи phpmyadmin в ручную, либо выполнить следующую команду:
Обновление .htaccess
Если вы изменяете сервер или доменное имя, возможно вам необходимо внести некоторые изменения в .htaccess, если он используется. Если в .htaccess вы ничего не добавляли, то и изменять ничего не требуется.
На новом сервере
Авторизуйтесь а админке modx на новом сервере, возможно вы увидите следующую надпись:
Это происходит потому что modx кеширует данные. Для решения вам необходимо очистить кеш и зайти в админку повторно.
Повторный запуск установки
Всякий раз, когда вы переносите сайт на modx на новое место, вам необходимо запустить установку повторно. Загрузите в папку с сайтом дистрибутив modx и запустите установку по адресу domain.com/setup. При запуске скрипта выберите обновление существующей конфигурации.
Обновление настроек расширений
Некоторые расширения, к примеру Gallery, хранят свои пути в настройках. При переносе сайта на другое место, вам необходимо обновить эти пути. Зайдите в админку сайта → «Система» → «Настройки системы». Далее выберите необходимое расширение и в настройках измените пути на правильные.
Заключение
Желательно хранить копию бэкапа системы modx со старого сервера, пока вы полностью не проверите функционал на новом сервере. Если у вас возникли проблемы в процессе установки, попробуйте удалить данные из каталога core/cache, удалить кеш браузера и повторить перенос.