Сокрытие признаков Joomla! Печать
Статьи - Joomla 1.5

Сокрытие признаков Joomla!

При взломе сайта злоумышленник в первую очередь определяет платформу и CMS сайта. Сделать это можно по ряду признаков, характерных для той или иной CMS.

 

Рассмотрим самые распространённые и явные признаки CMS Joomla!, а также способы устранения этих признаков.

 

1. Копирайт внизу страницы

Стандартный копирайт выглядит так: «Joomla! is Free Software released under the GNU/GPL License».

2. Формат ссылок

Стандартные ссылки у Joomla! выглядят следующим образом: http://site.ru/index.php?option=com_frontpage&Itemid=1 http://site.ru/index.php?option=com_content&task=view&id=14&Itemid=1 http://site.ru/content/view/14/1 и т.п.

3. Административная панель (админка)

Проверяем наличие админки по стандартному адресу Joomla!: site.ru/administrator

4. Meta-теги

Многие забывают изменить описание сайта и его ключевые слова. В итоге в исходном коде страницы мы можем увидеть следующее:

<meta name="description"
content="Joomla - the dynamic portal engine and content management system" />
<meta name="keywords" content="Joomla, joomla" />

А также тег generator, который генерируется ядром:

<meta name="Generator"
content="Joomla! - Copyright © 2005-20010 Open Source Matters. All rights reserved." />

5. Просмотр позиций для модулей

При обращении к сайту по адресу site.ru/?tp=1 можно легко убедиться что сайт работает именно на CMS Joomla!

6. Robots.txt

Просмотрев этот файл по адресу site.ru/robots.txt можно также с некоторой долей вероятности определить CMS:

User-agent: * Disallow: /administrator/ Disallow: /cache/ Disallow: /components/

7. Постраничная навигация сайта

Иногда достаточно одного взгляда на построение постраничной навигации: << В начало < Предыдущая 1 2 3 4 5 Следующая > В конец >>

8. Содержимое папок сайта

На некоторых хостах (что совсем печально) можно посмотреть содержимое всех папок сайта: например site.ru/components/

9.  Стандартные пути к шаблону

и название соответствующих классов (зашитых в ядро).

10. Стандартная иконка Joomla!

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

11. Ошибка 404

После ввода заведомо несуществующего адреса, Joomla! выдает стандартную, всем знакомую красненькую табличку с надписью «404 - Компонент не найден».

Способы избавления от вышеперечисленных признаков

1.   Копирайты в «подвале»  (footer) сайта

Joomla 1.0.x

После установки Joomla! внизу страницы можно увидеть следующее:

 

© 2009 Site Name Joomla! is Free Software released under the GNU/GPL License.

 

В файле index.php вашего шаблона есть строка:

 

<?php include_once( $GLOBALS['mosConfig_absolute_path'] . '/includes/footer.php' ); ?>

Удалив ее, можно избавиться от вывода копирайтов в «подвале» сайта. Но только для этого шаблона. Если у вы часто меняете шаблоны, есть смысл сделать небольшой хак, что б избавиться от этого раз и навсегда.

 

Открываем файл includes/footer.php и видим следующие стоки:

 

<div align="center">
&copy; <?php echo mosCurrentDate( '%Y' ) . ' ' . $GLOBALS['mosConfig_sitename'];?>
</div>

Этот

выводит значок копирайта, текущий год и название вашего сайта.

 

А также:

 

<div align="center">
<?php echo $_VERSION->URL; ?>
</div>

Этот

выводит версию движка и лицензию.

 

Удаляем или редактируем их.

 

Joomla 1.5.x

В линейке 1.5.x вывод копирайтов осуществляется в корне отличным способом и убрать его можно минимум тремя способами:

 

а) В менеджере модулей отключить вывод модуля «Footer» (mod_footer). Но в этом случае исчезнуть все копирайты, а не только "joomla-овские".

 

б) В языковом файле /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>

2. Ссылки на страницы

Чтобы изменить стандартный тип ссылок на внутренние страницы Joomla! необходимо использовать сторонние компоненты, которые могут создавать любые ссылки на внутренние страницы вашего сайта – sh404SEF, ARTIO JoomSEF, NuSEF (бесплатные), SEF Advance (платный) и другие.

3. Админка

Всем известно что вход в административную часть сайта на CMS Joomla! осуществляется через site.ru/administrator

 

Есть два способа скрыть вход в админку.

 

а) Средствами сервера: поставить пароль на папку administrator

 

В папке administrator создаем такой .htaccess:

 

AuthName "For Registered Users Only"
AuthType Basic
AuthUserFile /pub/site.ru/.htpasswd
require valid-user

Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.

 

У этого способа есть один очень существенный недостаток: если используются расширения у которых файлы обращаются к папке администратора (например языковый файл или другие), то вместо требуемого пользователь столкнется с предложением ввести логин и пароль.

 

б) Средствами Joomla: поставить специально предназначенные для этого расширения.

 

Например плагин для Joomla! 1.5 jSecure Authentication. При переходе на страницу site.ru/administrator он включает заданную переадресацию. В админку можно попасть, только задав ключевое слово в адресной строке: site.ru/administrator/?password

 

4. Meta-теги сайта. Description, keywords и Generator

Содержимое meta-тегов Description и keywords прописывается в глобальных настройках сайта и означает не что иное, как описание сайта и его ключевые слова. Просто не забывайте заполнять эти данные (встречается и такое). А вот на meta-тег Generator без хака мы повлиять не сможем.

Generator для Joomla! 1.0.x:

В исходном коде страниц видим:

<meta name="Generator" content="Joomla! - Copyright © 2005-2007 Open Source Matters.
All rights reserved." />

Данная строка выводится в функции mosShowHead() файла includes/frontend.php, строка 195 (для Joomla 1.0.15):

$mainframe->addMetaTag('Generator', $_VERSION->PRODUCT . ' - ' . $_VERSION->COPYRIGHT);

Для удаления этой информации из кода страниц сайта необходимо закомментировать или удалить эту строчку.

Generator для Joomla! 1.5.x:

В исходном коде страниц видим:

<meta name="generator" content="Joomla! 1.5 - Open Source Content Management" />

Есть два способа влияния на мета-тег Generator: путем хака ядра и внесением кода в шаблон. Первый способ (хак ядра Joomla!) подходит тем, кто не планирует постоянно обновлять ядро сайта и/или часто меняет шаблоны сайта.

Открываем следующие файлы:

libraries/joomla/document/document.php
libraries/joomla/document/html/renderer/head.php

Если хотим просто изменить эту строку, то в файле document.php находим примерно 85 строку:

var $_generator = 'Joomla! 1.5 - Open Source Content Management';

и вставляем свое внутрь кавычек ‘ ‘ Если хотим совсем удалить этот мета тег, то в файле head.php, комментируем // строку (примерно 83):

$strHtml .= $tab.'<meta name="generator" content="'.$document->getGenerator().'" />';

Второй способ (правка шаблона), более мягкий и не требует вмешательства в код ядра Joomla! (при обновлениях ядра можно не беспокоиться о хаках, так как их просто не будет). Где-то между тегами и вставляем следующую строку:

<?php $this->setGenerator('Ваш мета-тег geneator');?>

Или же оставляем пустое значение мета-тега:

<?php $this->setGenerator(''); ?>

5. Исключаем возможность просмотра позиций для модулей через site/?tp=1

Для Joomla! 1.0.x

Для этого нам надо сделать небольшой хак. Открываем файл /includes/frontend.php Ищем примерно 129-135 строки (для Joomla! 1.0.15):

$tp = intval( mosGetParam( $_GET, 'tp', 0 ) );
if ($tp) {
echo '<div style="height:50px;background-color:#eee;
margin:2px;padding:10px;border:1px solid #f00;color:#700;">';
echo $position;
echo '</div>';
return;
}

Удаляем их, либо комментируем.

Для Joomla! 1.5.x

Открываем файл /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';
}

Комментируем их.

7. Постраничная навигация.

Для изменения внешнего вида постраничной навигации необходимо немного переработать её вывод. В этом поможет статья «Изменение постраничной навигации сайта на CMS Joomla!»

8. Запрет просмотра содержимого папок вашего сайта

Если набрать адрес существующей папки, например, http://example.org/components/com_content/ и вы видите ее содержимое, то это значит, что на Вашем сервере настроенная выдача список директорий. Это дает возможность злоумышленнику дополнительные плюсы при изучении вашего сайта. Избежать открытого списка можно двумя способами:

1. В .htaccess или в конфигурации apache создать директиву:

Options - Indexes

2. В каждую директорию положить пустой файл index.html. По умолчанию загружается файл с названием index (.htm, .html, .php и т.д.).

10. Стандартная иконка Joomla!

В первую очередь иконка сайта favicon.ico ищется в корне сайта. Вы можете создать свою иконку (например с помощью сервиса http://favicon.ru) и загрузить ее в корень. Второй вариант - иконка помещается в папку вашего шаблона.

11. Ошибка 404

Страница с ошибкой 404 появляется тогда, когда неверно указан адрес (URL) запрашиваемого сайта или страницы, либо когда документ отсутствует на web-сервере. Обычно пользователь закрывает эту страницу и уходит на поиски других ресурсов, удовлетворяющих его требованиям. Для того, чтобы "не потерять" пользователя, рекомендуется создать свою страницу с ошибкой 404, со своим дизайном и инструкциями, куда перейти пользователю дальше - воспользоваться поиском или перейти на главную страницу, карту сайта и т.п.

В данной статье рассказывается, как можно сделать собственную страницу «Ошибки 404». В сети Интернет на различных сайтах и форумах существует множество примеров по созданию сообщения об ошибке. Мы предлагаем Вам наиболее удобный, на наш взгляд.

Итак, стандартный файл error.php выглядит так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>"
lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
<title><?php echo $this->error->code ?> - <?php echo $this->title; ?></title>
<link rel="stylesheet" href="/<?php echo $this->baseurl; ?>/templates/system/css/error.css"
type="text/css" />
<?php if($this->direction == 'rtl') : ?>
<link rel="stylesheet" href="/<?php echo $this->baseurl ?>/templates/system/css/error_rtl.css"
type="text/css" />
<?php endif; ?>
</head>
<body>
<div align="center">
<div id="outline">
<div id="errorboxoutline">
<div id="errorboxheader"><?php echo $this->error->code ?> - <?php echo $this->error->message ?>
</div>
<div id="errorboxbody">
<p><strong><?php echo JText::_('You may not be able to visit this page because of:'); ?>
</strong></p>
<ol>
<li><?php echo JText::_('An out-of-date bookmark/favourite'); ?></li>
<li><?php echo JText::_('A search engine that has an out-of-date listing for this site'); ?></li>
<li><?php echo JText::_('A mis-typed address'); ?></li>
<li><?php echo JText::_('You have no access to this page'); ?></li>
<li><?php echo JText::_('The requested resource was not found'); ?></li>
<li><?php echo JText::_('An error has occurred while processing your request.'); ?></li>
</ol>
<p><strong><?php echo JText::_('Please try one of the following pages:'); ?></strong></p>
<p>
<ul>
<li><a href="/<?php echo $this->baseurl; ?>/index.php"
title="<?php echo JText::_('Go to the home page'); ?>">
<?php echo JText::_('Home Page'); ?></a></li>
</ul>
</p>
<p><?php echo JText::_('If difficulties persist, please contact the system administrator of this
site.'); ?></p>
<div id="techinfo">
<p><?php echo $this->error->message; ?></p>
<p>
<?php if($this->debug) :
echo $this->renderBacktrace();
endif; ?>
</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

Открываем в админке Joomla менеджер материалов и создаем новую статью. Оформляем своё сообщение об «Ошибке 404», пишем свой текст, вставляем свои изображения... Затем, в редакторе отключаем сам редактор и перед вами появится код. Копируем этот код. Теперь возвращаемся в наш стандартный файл error.php и находим следующий код, который привязывает файлы стилей:

<head>
<title><?php echo $this->error->code ?> - <?php echo $this->title; ?></title>
<link rel="stylesheet" href="/<?php echo $this->baseurl; ?>/templates/system/css/error.css"
type="text/css" />
<?php if($this->direction == 'rtl') : ?>
<link rel="stylesheet" href="/<?php echo $this->baseurl ?>/templates/system/css/error_rtl.css"
type="text/css" />
<?php endif; ?>
</head>

Вам нужно закомментировать весь этот код или просто удалить его. После этого находим следующий код:

<p><strong><?php echo JText::_('You may not be able to visit this page because of:'); ?>
</strong></p>
<ol>
<li><?php echo JText::_('An out-of-date bookmark/favourite'); ?></li>
<li><?php echo JText::_('A search engine that has an out-of-date listing for this site'); ?></li>
<li><?php echo JText::_('A mis-typed address'); ?></li>
<li><?php echo JText::_('You have no access to this page'); ?></li>
<li><?php echo JText::_('The requested resource was not found'); ?></li>
<li><?php echo JText::_('An error has occurred while processing your request.'); ?></li>
</ol>
<p><strong><?php echo JText::_('Please try one of the following pages:'); ?></strong></p>
<p>
<ul>
<li><a href="/<?php echo $this->baseurl; ?>/index.php"
title="<?php echo JText::_('Go to the home page'); ?>">
<?php echo JText::_('Home Page'); ?></a></li>
</ul>
</p>
<p><?php echo JText::_('If difficulties persist, please contact the system administrator of this
site.'); ?></p>
<div id="techinfo">
<p><?php echo $this->error->message; ?></p>
<p>
<?php if($this->debug) :
echo $this->renderBacktrace();
endif; ?>
</p>

и вместо вышеуказанного кода вставляете свой код, который Вы создавали ранее. Сохраняем в utf-8. И теперь в браузере набираем http://адрес_вашего_сайта/абра_кадабра. Вот Вы видите свою собственную страницу «Ошибка 404».