За последние несколько недель, часто и таки много встречал сообщений о взломе сайта, которые управляются CMS Joomla. Пришлось потрудиться и самому. Один из мной разработанных сайтов был заражен. После очистки стал искать, может, что пропустил в настройке безопасности. Вот именно в этот момент появилось желание собрать все отысканные рекомендации на одной странице.
И так, допустим, что очередной сайт создали, теперь самое время перейти к настройке безопасности.
Первым с чего следует начать настройку – это удалить не нужные файлы и каталоги. В корне сайта ищем каталог INSTALLATION (если его не удалили после установки системы), а также файлы: INSTALL.php, configuration.php-dist, INSTALL.php, LICENSE.php, LICENSES.php, CHANGELOG, CREDITS, COPYRIGHT (в Joomla 1.7 их нет, есть только LICENSE.txt README.txt). Удаляем эти файлы.
Также не забываем о компонентах и плагинах, которые не задействованы.
Чтобы произвести настройку безопасности, нам потребуется файл .htaccess. Он уже присутствует в корне сайта, только имеет расширение текстового файла — htaccess.txt — заменяем его на .htaccess.
Часто такое случается, лично со своей практики, что готовый сайт передают со стандартным логином – admin. Это уже есть не очень хорошо, поскольку если известно одно данное из двух, то второе подобрать можно.
Изменяем логин по умолчанию – admin на свой!
Проверяем права доступа к файлам и папкам. Они должны быть такими:
*на файл конфигурации (configuration.php) выставить права 444
*php файлы – 644
*прочие каталоги – 755
Если нам зачем-то понадобиться изменить какие строки в этих файлах, то сначала нужно изменить права, а только потом внести изменения.
Раз мы заговорили о правах, то стоит напомнить о том, что следует запретить возможность просмотра файлов в какой-то из папок. Для этого в каждую папку (директорию) помещаем пустой файл — index html или index.php и в файл .htaccess или в конфигурации apache добавляем строку
Options –Indexes
Заходишь на сайт и видишь стандартный файвикон Joomla. Все понятно о системе. Чтобы не преподносить такой подарок – заменяем стандартный favicon.ico на свой. Сделать это можно так: нужно создать свою иконку и разместить ее в корне сайта.
Если мы заменили стандартную иконку Joomla на свою, то это еще не все. Joomla сообщает о себе в мета-тегах, которые можно увидеть, если открыть исходный код страницы.
Чтобы удалить строку
<meta name=»generator» content=»Joomla! 1.5 — Open Source Content Management» />
или изменить саму надпись — Joomla! 1.5 — Open Source Content Management, нужно:
**изменяем надпись – открываем файл document.php (он находиться — \libraries\joomla\document\document.php) и в строке 83-87, вместо Joomla! 1.5 … устанавливаем свою надпись;
**чтобы удалить эту строку вовсе, нужно в файле head.php (он находиться — \ libraries\joomla\document\html\renderer\head.php) отыскать такую строку (приблизительно 83-85) и комментируем ее – (\\)
\\$strHtml .= $tab.’<meta name=»generator» content=»‘.$document->getGenerator().’» />’.$lnEnd;
Стоит подчеркнуть, что этот вариант работает до первого обновления Joomla. Если произвели обновление, придется проделать это снова. Но чтобы избежать этого, можно произвести изменения в самом шаблоне. Между тегами <head>…</head> размещаем строку
<?php $this->setGenerator(‘Ваш мета-тег geneator’);?>
или же просто оставляем пустое значение мета-тега:
<?php $this->setGenerator(»); ?>
Не стоит забывать исправить ключевые слова в мета-тегах в админке, что находятся в общих настройках сайта.
Картинка внизу страницы сайта:
© 2011 Site Name
Joomla! is Free Software released under the GNU/GPL License.
Решения проблемы:
а) В менеджере модулей отключить вывод модуля «Footer» (mod_footer). Но в этом случае исчезнуть все копирайты, а не только джумловские.
б) В языковом файле \language\ru-RU\ru-RU.mod_footer.ini в строках:
FOOTER_LINE1=
FOOTER_LINE2=
Убрать все, что справа от знака равно
в) В файле \modules\mod_footer\tmpl\default.php отключить вывод 2-ой строки, удалив строку:
<div><?php echo JText::_( 'FOOTER_LINE2' ); ?></div>
Еще одной характерной чертой Joomla является уникальный запрос (?tp=1) для просмотра существующих позиций в шаблоне сайта. Для запрета выполнения такого запроса нужно в файл .htaccess добавить такие строки:
##### Start ?tp=1 prevention######
RewriteCond %{QUERY_STRING} tp=(.*)
RewriteRule ^(.*)$ index.php [F,L]
##### End ?tp=1 prevention ######
Существует еще один вариант блокировки этой характеристики, который заключается в комментарии строк, а именно, в файле helper.php (его расположение — /libraries/joomla/application/module/helper.php) находим код (приблизительно 96-103 строка)
if(count($result) == 0) {
if(JRequest::getBool(‘tp’)) {
$result[0] = JModuleHelper::getModule( ‘mod_’.$position );
$result[0]->title = $position;
$result[0]->content = $position;
$result[0]->position = $position;
комментируем каждую строку, а также в этом файле, комментируем вот такие строки (199-201)
if(JRequest::getBool(‘tp’)) {
$attribs['style'] .= ‘ outline’;
}
Этот вариант с комментированием строк, если честно, у меня не всегда получается. Бывает, что из за этого перестает работать админка сайта, тому в большинстве случаев – добавляю строки в файл .htaccess
Большинство «вредоносных» файлов помещают в папку images. Это хорошее решение, ведь мало кто отважится просмотреть эту папку, поскольку там же только картинки.
Чтобы этого избежать, снова обращаемся к файлу .htaccess.
Создаем новый файл .htaccess в котором размещаем строки:
php_flag engine off
RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
и помещаем его в папку images.
Не стану расписывать, что же такое эксплойт, лучше сразу перейдем к защите от таких хакерских атак. В основной файл .htaccess (в корне сайта) добавляем блок
########## Начинаем запись правил чтобы заблокировать основные эксплойты
#
# Блокируем любой скрипт пытающийся получить значение mosConfig через URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
# Блокируем любой скрипт пытающийся отправить любое дерьмо чере base64_encode по URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
# Блокируем любой скрипт который содержит тег < script> в URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# Блокируем любой скрипт, который пытается установить глобальную переменную PHP через URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Блокируем любой скрипт пытающийся изменить _REQUEST переменную через URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) [OR]
# Блокируем любой скрипт, который пытается установить CONFIG_EXT (баг в com_extcal2)
RewriteCond %{QUERY_STRING} CONFIG_EXT([|%20|%5B).*= [NC,OR]
# Блокируем любой скрипт, который пытается установить sbp or sb_authorname чере URL (баг simpleboard)
RewriteCond %{QUERY_STRING} sbp(=|%20|%3D) [OR]
RewriteCond %{QUERY_STRING} sb_authorname(=|%20|%3D)
# Отправляем все заблокированный запросы на главную с ошибкой 403 Forbidden!
RewriteRule ^(.*)$ index.php [F,L]
#
########## Заканчиваем запись правил чтобы заблокировать основные эксплойты
Приведенные выше рекомендации – это методы, которые подвластны каждому. Теперь же перейдем к более сложным способам защиты, которые могут нарушить работу сайта. Прежде чем приступить, создайте копию сайта!
Создали? Идем далее.
Почему ”Двойной доступ”? Ответ на это вопрос можете отыскать на одном из ранее опубликованных материалов, а также подробно ознакомиться с тонкостями ее создания и работы. Здесь же только скажу, что нужно создать два файла — .htaccess и .htpasswd, составить необходимый код
AuthUserFile /DocumentRoot/administrator/.htpasswd – размещение файла .htpasswd, а DocumentRoot — это прямой путь Хоста, который можно посмотреть в configuration.php сайта
AuthGroupFile /dev/null
AuthName «Запароленная зона» — сообщение, которое будет выводиться пользователю
AuthType Basic
<limit GET POST>
require valid-user
</limit>
сохранить его в .htaccess. В шифре MD5 сгенерировать пароль для входа и занести его в .htpasswd
admin: aaAN1ZUwjW7to – где aaAN1ZUwjW7to – это зашифрованный пароль
и разместить эти файлы в папке administrator
Это же можно сделать через панель управления Хостингом сайта.
Стандартная страница ошибок 404 Joomla является простой и такой узнаваемой, что по ее строению сразу определяем систему.
Изменить оформление страницы 404 можно такими способами:
***создаем материал, не указывая раздел и категорию;
***в меню создаем новый пункт по типу шаблона материала для этой страницы. После создания в свойствах данного пункта меню смотрите истинный адрес страницы. Например, этот: index.php?option=com_content&view=article&id=23
Записываем;
***в папке templates/system есть файл error.php. Удаляем все его содержимое и вместо этого пишем:
<?php
defined(‘JPATH_BASE’) or die();
echo file_get_contents(JURI::root().’/index.php?option=com_content&view=article&id=23′);
?>
Еще вариант. Переименовываем оригинальный файл, а вместо него создаем свой — новый error.php, вписываем туда то, что указано выше, и снова помещаем в папку templates/system.
Большинство SQL инъекций для получения необходимой информации для взлома используют именно стандартное свойство Joomla — префикс (jos_), которое устанавливается по умолчанию, например данные таблиц — jos_users.
Изменим его. Это можно сделать при помощи Admin Tools или в ручную.
Прежде чем приступить к изменению префикса – создайте копию сайта!
Другой префикс для таблицы можно задать непосредственно при установке Joomla, но если система установлена и работа сайта настроена, то в таком случае, нужно:
****войти в панель управления Joomla!. Открыть «Общие настройки» —> «Сервер» и отыскать панель «Установка базы данных».
Именно в этом пункте можно изменить установленный префикс таблиц на любой другой. После того, как записали значение нового префикса, жмем кнопку Сохранить.
Внимание! Если после такого изменения сайт не работает – это нормально и для восстановления работы нужно выполнить:
****войти в PhpMyAdmin. Переходим в кладку экспорт, оставляем все значения по умолчанию и нажимаем кнопку «Пуск/Пошел». Не стоит волноваться, если экспорт данных займет много времени.
Как экспорт будет завершен, выделяем весь код и копируем его в блокнот (или другой текстовый редактор), сохраняем файл. Копию сделали, можем двигаться далее.
Возвращаемся в PhpMyAdmin. Выбираем все наши таблицы, и удаляем.
Еще раз, обязательно убедитесь, что сохранили экспортированный до этого код, иначе потеряете данные сайта!!!
Теперь возвращаемся к текстовому редактору, в котором производим поиск – ключ «jos_» и заменяем этот стандартный префикс на новый (установленный ранее в панели управления Joomla).
Теперь, полученный результат замены префикса, копируем (копируем все!), переходим в PhpMyAdmin, вкладка SQL и вставляем запросы (то, что скопировали в редакторе) и жмем кнопку Пуск.
Если у Вас есть вопросы, жалобы или предложения по работе нашей компании, напишите нам Нам важно любое мнение. Спасибо.