Используем файл .htaccess для защиты сайта. Скрываем доступ к админке Joomla и убираем просмотр модулей через ?tp=1

Категория: Безопасность сайта на Joomla - .

Используем файл .htaccess для защиты сайта. Скрываем доступ к админке Joomla и убираем просмотр модулей через ?tp=1

Здравствуйте, уважаемые пользователи моего блога о создании сайтов на Joomla. Данная статья будет посвящена повышению безопасности сайта на Joomla. Говорят, что невозможно защитить сайт на 100%, но это не значит, что следует пренебрегать мерами безопасности при настройке и оптимизации сайта. Ведь лучше быть максимально защищенным, так как это сможет уберечь Вас от очень многих распространённых атак и вирусов. Я уже писал статью о методах взлома сайтов на Joomla и об их защите, но та статья была больше посвящена теории и была рассчитана на более опытных вебмастеров, которые без лишних вопросов могли выполнять данные мной указания и советы. А сейчас пришло время более подробно расписать основные пункты защиты Joomla, чтобы и у новичков не оставалось вопросов по безопасности сайта.

В этом материале мы разберём такие пункты, как скрытие ?tp=1 (эта команда нужна для отображения модулей в шаблоне Joomla), запрет доступа к админке Joomla, а так же я расскажу о других методах защиты с помощью файла .htaccess (этот файл находится в корневом каталоге вашего сайта и может называться htaccess.txt или .htaccess).

Зачем нужен файл htaccess в Joomla и что он из себя представляет?

Сначала разберёмся, что же из себя представляет файл htaccess. Htaccess - это файл дополнительной конфигурации для веб сервера Apache (как раз то, что нужно для Joomla). Через этот файл можно задать множество дополнительных команд и разрешений для пользователей. Находится этот файл в главном каталоге Вашего сайта (используем FileZilla для доступа к сайту на виртуальном хостинге) и действует на все файлы, каталоги и подкаталоги. Чтобы закрыть доступ к этому файлу через http (если ввести адрес сайта вида http://sayt.ru/htaccess.txt), нужно переименовать файл "htaccess.txt" в ".htaccess". Это запретит доступ к нему на уровне Apache и повысит общую безопасность Вашего проекта. С помощью этого файла можно даже запретить доступ посетителей вообще ко всему сайту. Он обладает большим количеством возможностей, но мы разберём только те, которые понадобятся нам для повышения защиты Joomla.

При покупке хостинга, нужно сразу обратить внимание на то, поддерживает ли он файл htaccess при работе с Joomla. Кроме этого, нужно узнать на какой системе работает сервер. Если сервер работает на Linux или Unix, то htaccess, скорее всего, будет поддерживаться. Вы можете сами вручную создать этот файл в блокноте или скопировать готовый (с рекомендуемыми командами для Joomla) со стандартного пакета Joomla последней версии. Если Вы не обладает достаточными знаниями в этой сфере, то не рекомендуется существенно изменять работу данного файла, так как есть риск того, что сайт перестанет работать. В любом случае - сначала всегда нужно сделать резервную копию файла или всего сайта.

Как выглядит файл .htaccess?

Изначально (когда Вы скачиваете дистрибутив с движком Joomla), файл htaccess.txt будет выглядеть примерно так (joomla скачана с сайта Joom.ru и описание работы файла переведено на русский язык):

##
# @version $Id: htaccess.txt 21064 2011-04-03 22:12:19Z dextercowley $
# @package Joomla RE
# @localized Авторские права (C) 2005 - 2011 Joom.Ru - Русский дом Joomla! Все права защищены.
# @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! - свободное программное обеспечение.
# Последнее изменение этого файла - 09.04.2011
##

# Установка кодировки сайта по умолчанию. При необходимости, закомментируйте.
# Строка решает проблему с "крякозябрами" в редакторе TinyMCE и текста лицензии при установке
# на Денвере и некоторых серверах с жестко прописанной кодировкой. Это на 99,9% работающее решение.
# После переименования этого файла htaccess.txt в .htaccess проблема решится.
# Если проблема осталась - перечитайте предыдущее предложение (возможно неправильно переименовали).

AddDefaultCharset utf-8

# Следующие строки - попытка исправить настройки PHP
# для полного соответствия системным требованиям Joomla.
# Раскомментируйте (символ комментария - #) нужные строки,
# если настройки вашего хоста не соответствуют рекомендациям
# системных требований Joomla.
# При возникновении 500 ошибки сервера, закомментируйте строку, вызывающую
# ошибку, или все строки с php_flag.

# php_flag register_globals Off
# php_flag display_errors Off
# php_flag file_uploads On
# php_flag allow_url_fopen off
# php_flag magic_quotes_gpc On
# php_flag magic_quotes_runtime Off

# Пример явного указания каталога для записи сессий:
# Для Windows - c:/temp
# для UNIX - /tmp

# Указанный каталог должен физически существовать и быть доступен для записи

# При необходимости, раскомментируйте строку ниже этой
# php_value session.save_path c:/temp

#####################################################
# ПРОЧТИТЕ ПОЛНОСТЬЮ, ЕСЛИ БУДЕТЕ ИСПОЛЬЗОВАТЬ ЭТОТ ФАЙЛ
#
# Строка ниже этого раздела: 'Options +FollowSymLinks' может вызвать проблему
# при некоторых конфигурациях сервера. Она необходима для использования модуля
# Apache mod_rewrite, но может быть уже настроена администратором вашего
# сервера и изменение этого параметра в .htaccess может быть запрещено.
# Если эта директива вызывает ошибку сервера, то закомментируйте строку
# (добавьте символ # в начало строки), перезагрузите в браузере сайт и
# протестируйте работу SEF-ссылок. Если они работают, то вам не надо ничего
# менять здесь, т.к. всё уже настроено администратором сервера.
#
# Строки, которые можно раскомментирвать (и использовать) имеют только один #.
# Строки с двумя символами ## раскомментировать не надо. В разделах, которые вы
# не используете, все строки должны начинаться с символа #
#
#####################################################

## Может быть закомментировано, если вызывает ошибку сервера. Смотрите примечания выше.
Options +FollowSymLinks

#
# Включение mod_rewrite

RewriteEngine On

########## Начало - Правила обработки запросов для блокировки распространенных эксплоитов
## Если у вас возникли проблемы с вашим сайтом, используйте ниже описанные операции
## Они пытаются заблокировать самые распространенные эксплоиты Joomla!
#
## Код запрета доступа к xml-файлам расширений (раскомментируйте для активации)
#<Files ~ "\.xml$">
#Order allow,deny
#Deny from all
#Satisfy all
#</Files>
## Конец кода запрета доступа к xml-файлам
# Блокировать любой запрос, пытающийся установить значение 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)([^s]*s)+cript.*(>|%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})
# Перенаправлять заблокированные запросы на страницу 403 с запрещенными ошибками!
RewriteRule .* index.php [F]
#
########## Конец правил обработки для блокировки распространенных эксплоитов

# Раскомментируйте следующую строку, если URL вашего web-сервера
# не связаны напрямую с физическими путями файлов.
# Обновите ваш каталог Joomla (используйте "/" для обозначения корня сервера)

# RewriteBase /

########## Начало раздела SEF ядра Joomla!
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# Если запрошенный путь и файл не содержат /index.php и запрос еще
# не был перенаправлен на скрипт index.php
RewriteCond %{REQUEST_URI} !^/index\.php
# и запрашивается URL корня или расширения, или
# запрашиваемый URL оканчивается на одно из перечисленных расширений
RewriteCond %{REQUEST_URI} (/[^.]*|\.(php|html?|feed|pdf|raw))$ [NC]
# и запрошенный путь не соответствует пути к физическому файлу
RewriteCond %{REQUEST_FILENAME} !-f
# и запрошенный путь не соответствует пути к физической папке
RewriteCond %{REQUEST_FILENAME} !-d
# то перенаправить запрос на скрипт index.php
RewriteRule .* index.php [L]
#
########## Конец раздела SEF ядра Joomla!

Стандартно в нём уже вшита защита от многих эксплойтов, через которые злоумышленник сможет взломать сайт, но всё же лучше немного изменить структуру данного файла для повышения защиты. Кроме того, Вы вольны создать файл с разрешением .htaccess в любой папке сайта, чтобы запретить или запаролировать доступ к данной папке. В этом плане работа с данным файлом практически не ограничена. Только обратите внимание, что эти настройки данного файла подойдут только для Joomla. Кроме того, в разных версиях этого движка, структура документа .htaccess может изменяться. Так что не используйте эти настройки во всех сайтах, так как Выше указан просто пример!

Защита сайта с помощью веб-сервера Apache (работа с файлами .htaccess и .htpasswd)

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

Что из себя представляет этот способ? Этот способ представляет из себя процесс аутентификации пользователя посредством сервера Apache. Он довольно простой, но при этом очень надежно защитит доступ к Вашей административной панели сайта. Для выполнения описанных ниже действий, Вам не потребуется специальных знаний в этом вопросе, Вам нужно лишь внимательно проделать то, что я напишу и покажу на примерах.

После проделанных действий, при попытке зайти в админку сайта, пользователь увидит сообщение ввода логина и пароля. Только это будут не логин и пароль от админки, а логин и пароль от сервера Apache (даже внешне эти окна для ввода данных будут отличаться). А вот для того, чтобы сервер закрывал доступ именно в папку "administrator", а не на другие папки сайта, файлы нужно будет скидывать именно туда (то есть в ту папку, доступ к которой Вы хотите скрыть).

Принцип работы аутентификации (ввода логина и пароля)

Когда посетитель пытается зайти в определённую директорию, сервер Apache посылает заголовок 401. Браузер, которым пользуется посетитель, принимает данный заголовок, и ему открывается окно для ввода логина и пароля (эти данные могут отличаться от логина и пароля для входа в админку). После ввода данных в окне сервера Apache, он проверяет их (логин и пароль) на нахождение в специальном документе (файл .htpasswd). Если данные там есть и они введены правильно, то пользователь получает доступ к закодированной папке. А уже после этого нужно будет вводить данные для входа в админку. Кроме того, браузер ещё и запоминает область действия этих данных, чтобы при повторном заходе в папку, Вам не пришлось заново вводить данные для доступа. Если данные введены неверно или Вам просто нужно ещё раз их ввести по другой причине, то для вывода окна с вводом логина и пароля, Вам нужно будет почистить кэш Вашего браузера.

Что нужно для защиты через Apache

Вот что нам понадобиться для настройки защиты посредством Apache:

  1. Доступ к FTP Вашего сайта;
  2. Файл .htaccess. Вы можете просто создать пустой документ с названием .htaccess и в нём вбить потом нужные данные (чуть ниже напишу, какие именно);
  3. Файл .htpasswd. Так же нужно будет создать пустой текстовый файл с названием .htpasswd и данными, о которых так же будет написано ниже;
  4. Программа для генерации паролей по алгоритму MD5 htpasswd.exe (можно сделать это в режиме онлайн через специальный сервис - мы будем использовать этот способ, так как для этого не нужно скачивать и устанавливать сторонние программы на свой компьютер).

Имея под рукой все необходимые данные, можно приступать к работе. Опишу вкратце процесс: сначала нам нужно создать файл паролей .htpasswd, потом сгенерировать пароли через специальный онлайн сервис (можно через программу htpasswd.exe, если умеете ей пользоваться. Но я опишу способ генерации файлов в режиме онлайн, так как так намного быстрее и проще), затем мы создаём файл .htaccess с нужными данными и кидаем оба этих файла в папку "administrator" (ведь нам нужно защитить именно её от доступа "нехороших" людей). Вот и всё! Чуть ниже я опишу весь процесс более подробно.

Создание файла .htpasswd и генерация логина и пароля в шифре MD5 для него

Создаём текстовый файл с названием .htpasswd (сам файл пока что оставляете пустым). Далее переходим на сайт _http://www.ifstudio.org/seo/htaccess.php (генератор файлов .htaccess и .htpasswd) и вводим там логин (я ввел admin, а Вы можете ввести что угодно), пароль (для примера я ввёл 123456) и папку, которую надо закрыть от доступа (в нашем случае - это папка administrator):

Генерация логина и пароля в MD5 для файла .htpasswd

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

Генерация логина и пароля в MD5 для файла .htpasswd

Во второй строчке (окошко с названием "Файл .htpasswd") написаны логин и пароль (в зашифрованном виде пароль 123456 выглядит вот так: aaAN1ZUwjW7to, поэтому Вы его сначала и не узнали). Именно эти данные в таком же виде, как они написаны в окне (то есть, "admin:aaAN1ZUwjW7to"), Вам и нужно вставить в текстовый файл с названием .htpasswd. После этого Вам осталось лишь скопировать данный файл в папку administrator Вашего сайта. Теперь осталось лишь создать файл .htaccess и скопировать его туда же.

Создание файла .htaccess

В текстовом редакторе создайте файл с названием .htaccess и скопируйте в него данные, которые были указаны в первой части онлайн-генератора файлов .htaccess и .htpasswd. А именно вот эти:

AuthUserFile administrator/.htpasswd
AuthGroupFile /dev/null
AuthName "Запароленная зона"
AuthType Basic
<limit GET POST>
require valid-user
</limit>

На всякий случай, я распишу подробно, что означают эти данные:

  1. AuthUserFile administrator/.htpasswd (это означает путь к файлу .htpasswd);
  2. AuthGroupFile /dev/null (это нужно если доступ должна иметь группа людей);
  3. AuthName "Запароленная зона" (сообщение, которое будет выводиться пользователю в окне ввода логина и пароля. Этот текст предназначен для того, чтобы пользователю было понятно, куда он пытается получить доступ);
  4. AuthType Basic (это означает тип аутентификации. В нашем случае, нужно оставлять базовую аутентификацию);
  5. require valid-user (означает, что доступ разрешен всем, кто прошел проверку. Если написать required admin, то доступ будет иметь только пользователи с именем админ и так далее).

Файл .htaccess так же нужно перекинуть в папку "administrator" на Вашем сайте. Теперь всё готово. Осталось только проверить на работоспособность и убедиться в том, что мы всё сделали правильно. Для проверки нужно попробовать зайти в административную панель Вашего сайта. Если у Вас высветится такое окно, то значит Вы всё сделали правильно:

Аутентификация сайта посредством Apache

Но лучше попробовать ввести логин и пароль, чтобы уже точно убедиться в правильности выполненных действий. Логин нужно вводить тот, который написан в файле .htpasswd. А пароль, наоборот, не тот, который написан в этом файле (это зашифрованный вид. Шифр формата MD5), а тот, который Вы вводили на сайте онлайн генераторе (я вводил для примера 123456). После ввода данных, вход должен осуществиться. Только для входа в админку, нужно будет всё равно вводить данные для доступа (логин и пароль для доступа в админку останутся прежними, просто теперь перед их вводом, нужно будет ввести логин и пароль для Apache).

Защита доступа в админку через Панель управления Вашего хостинга

Сейчас, как правило, многие хостинговые компании поддерживают настройку данного способа защиты сайта (посредством Apache) прямо через панель управления сайтом. Для этого нужно лишь иметь доступ в эту самую панель. Это очень удобно, так как Вам не придётся возиться со всеми этими файлами, паролями и прочими данными, а просто нужно будет ввести путь к папке, которую нужно закрыть, и прописать к ней пароль. При выборе и покупке хостинга, Вы можете выбрать, какую панель управления использовать для Вашего сайта (основные панели для управления - это Cpanel и ISPmanager). Мне довелось поработать и с той и с другой панелью. Особой разницы я не заметил. О защите доступа к админке Joomla через панель управления, я расскажу на примере ISPmanager, так как сейчас я пользуюсь именно этой панелью для работы. Хотя опять же повторюсь, что они схожи, так что у Вас не должно возникнуть проблем при настройке ограничения доступа к папкам и на этой панели.

Первым делом Вам нужно найти строку, которая отвечает за ограничение доступа к определённым папкам и файлам сайта. У меня она находится в категории "World Wide Web" и называется "Ограничение доступа":

Защита доступа в админку через Панель управления Вашего хостинга

При нажатии на кнопку "Ограничение доступа", Вы попадёте в пустое окно. Вам нужно будет нажать на кнопку "Создать" в правой верхней части экрана. Сначала откроется окно, в котором Вам нужно будет ввести путь до папки, которую нужно закрыть. В нашем случае это опять же папка "administrator":

Защита доступа в админку через Панель управления Вашего хостинга

Нажимаете Ок. Теперь Вы создали путь, который желаете закрыть от посторонних глах. Осталось добавить пользователя, который будет иметь доступ к данной папке. Для этого смотрим опять в правую верхнюю часть экрана и ищем там "Пользователи":

Защита доступа в админку через Панель управления Вашего хостинга

Нажимаете на эту картинку и опять попадаете в пустую директорию, так как ещё не создан ни один пользователь, для которого будет открыт доступ. Справа вверху опять нужно нажать "Создать". Откроется окно для добавления нового пользователя:

Защита доступа в админку через Панель управления Вашего хостинга

Вводите свои данные и нажимайте ОК. Всё, пользователь создан, и программа сама сохранит файл с паролем и логином там, где ей нужно. Теперь для доступа в админку у Вас будет высвечиваться точно такое же окно для ввода логина и пароля, как и при использовании предыдущего способа защиты админку joomla.

Убираем просмотр модулей шаблона через ?tp=1 с помощью файла .htaccess

Как Вы помните из статьи о расположении модулей в Joomla, узнать о том, где какой модуль находится на сайте, можно просто введя в конце страницы /?tp=1. А мы с Вами уже знаем из статьи об улучшении безопасности Joomla, что нам нужно спрятать от хакеров все упоминания о joomla, чтобы нас не нашли. Скрыть этот параметр можно многими путями, но так как сегодня мы говорим и работе с файлом .htaccess, я расскажу способ скрытия /?tp=1 именно через него. Для этого нужно просто дописать в файле .htaccess вот такой кусок кода:

##### Start ?tp=1 prevention######
RewriteCond %{QUERY_STRING} tp=(.*)
RewriteRule ^(.*)$ index.php [F,L]
##### End ?tp=1 prevention ######

Теперь любопытного пользователя, решившего просмотреть позиции модулей вашего шаблона, просто перебросит на главную страницу Вашего сайта. Этот кусочек кода можно вставить просто в самом конце документа .htaccess.

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

Комментарии  

#15 billyboyz 03.02.2016 12:46
В админке joomla можно отключить показ позиций модуля.
Этого достаточно или желательно все-таки редиректить на главную*?
Цитировать
#14 Михаил 10.07.2015 14:44
Все сделал по инструкции, сервер поддерживает данные типы файлов. При сохранении данных файликов в директории administrator, и при переходе на страницу www.bla-bla.com/administrator выбивается ошибка 404. В чем причина?
Цитировать
#13 Az 28.06.2015 18:54
Сделал, как написано про .htaccess и .htpasswd, почему-то после всего описанного не могу зайти в админку. Сначала при первом входе выдала форму для заполнения, заполнил всё верно, ввод нажал и... Internal Server Error. Ещё раз сделал всё с нуля, результат тот же. Джумла 1.5.
Цитировать
#12 fil 16.11.2014 06:06
не срабатывает защита Apach ..

окошко всплывает все как надо , но не принимает либо логин либо пароль. Пробовал много раз менял, постоянно после ввода показывает снова форму ввода. В чем может быть причина?
Цитировать
#11 Валерий 07.08.2014 14:40
Здравствуйте. Подскажите как в .htaccess преобразовать URL вида
my_site.ru/?pag e=2
в
my_site.ru/page /2/
Цитировать
#10 Cossack 15.02.2014 13:18
Joomla 3.2.2, T3 Framework - этот способ блокирует настройку шаблона в пункте Layout. А это очень нужная настройка.

За статьи на сайте, спасибо.
Цитировать
#9 Админ 14.11.2013 16:54
Цитирую Андрей:
Не проще просто закрыть доступ к http://сайт.ru/administrator для всех IP кроме своего? Для этого создаем файл .htaccess и вписываем в него

Order deny,allow
deny from all

Allow from (ваш IP адрес)

Здравствуйте! Спасибо за замечание, но я уже все это писал в этой статье: http://joofaq.ru/problemi-s-joomla-i-rasshireniyami/bezopasnost-sayta/brutfors-ataka-na-adminki-joomla-sajtov-1-avgusta-2013-goda
Цитировать
#8 Андрей 14.11.2013 14:00
Цитирую Админ:
Цитирую Андрей:
Не проще просто закрыть доступ к http://сайт.ru/administrator для всех IP кроме своего? Для этого создаем файл .htaccess и вписываем в него

Order deny,allow
deny from all

Allow from (ваш IP адрес)

Здравствуйте! Спасибо за замечание, но я уже все это писал в этой статье...

Извините, просто не увидел!
Цитировать
#7 Dean 12.11.2013 16:57
Болтовни НЕ много, объяснения подробные, за что большой СПС автору.
Цитировать
#6 Андрей 12.11.2013 16:12
Не проще просто закрыть доступ к http://сайт.ru/administrator для всех IP кроме своего? Для этого создаем файл .htaccess и вписываем в него

Order deny,allow
deny from all

Allow from (ваш IP адрес)
Цитировать
#5 Артём 12.10.2013 19:07
от посторонних глаХ.
Цитировать
#4 0042 21.09.2013 08:25
спасибо за ответ! )))
Цитировать
#3 Павел 18.09.2013 00:05
Боюсь, что страница 403 хранится не в движке Joomla. Она зависит от самого сервера, так что попробуйте уточнить данный момент у своего хостера.
Цитировать
#2 0042 17.09.2013 10:24
ищу инфу о том где хранится сама страница 403, что бы ее можно было отредактировать на свой вкус так сказать, подскажите где она находится?
Цитировать
#1 Константин 04.09.2013 14:13
За статью спасибо, но слишком много лишней болтовни.
Цитировать

Добавить комментарий


Защитный код
Обновить