Безопасность сайта Печать
Добавил(а) microsin   

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

[Основные уязвимости]

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

Причина №1: файл конфигурации доступен по записи
Вся «левая» информация помещается прямо в файл configuration.php, который, как известно, загружается всегда по include перед любыми данными. В результате вместо сайта стартует та информация, которая помещается в этот файл. Исправления: восстановить файл configuration.php. Защита: снять права на запись с этого файла.

Причина №2: открытые по записи директории
В папку /administrator (если она доступна на запись!!!) записывается файл .htaccess (если он там отсутствует!!!) в котором переопределяется стартовый файл каталога: вместо index.php указывается другой файл, который тоже записывается в эту же папку. В результате, при запуске админки по пути (без явного указания имени файла), запускается «левый» файл, как правило, с турецкими или чеченскими национальными символами. Исправление: удалить или восстановить файл .htaccess. Защита: следить за правами доступа или поместить в защищаемые папки файл .htaccess нулевой длины, помещенный туда через FTP.
ПРИМЕЧАНИЕ: Описанные методы не являются недостатками Joomla, а скорее результат русского «авось», когда пользователь на следит на правами на имеющиеся файлы и папки. Заключение - еще раз хочется обратить внимание, на то, что после успешной установки и настройки Joomla и ее расширений, нет никакой необходимости оставлять права на запись в директории сайта (за исключением папок cache и images). Поэтому, сразу после завершения настройки сайта, рекомендуется провести ревизию прав на файлы и папки, и закрыть по записи все папки, кроме двух перечисленных. И уж конечно, нет никакого смысла оставлять доступным по записи файл конфигурации Joomla.

[На что стоит обратить внимание при хостинге]

Не буду распространяться о тривиальных вещах типа "нужно использовать хорошие пароли, защищенный шелл, правильно настраивать права на каталоги и файлы" и т. д. Расскажу про несколько неожиданные вещи, те грабли, на которые сам наступил.

Обычно (стандарт де-факто) платный хостинг использует веб-сервер Apache. При его использовании меня всегда удивляло обилие файлов .htaccess, которые лежали в большинстве уже имеющихся по умолчанию каталогов сайта. Кроме того, в установке Joomla почти во всех каталогах лежат практически пустые файлы-заглушки index.htm. Поначалу я не обращал на эти файлы внимания, пока не начал создавать систему каталогов для размещения файлового архива. В мои планы входило только следующее:
- каталоги для размещения файлов должны быть удобны для меня;
- в каталогах могут храниться как файлы для скачки (по ссылкам), так и файлы, предназначенные только для меня (скачать их можно, только если знать месторасположение и имя файла, то есть только имея ссылку);
- у пользователей по умолчанию не должно быть возможности "лазить" по дереву моего файлового архива и просматривать, какие файлы там есть.

Я, как обычно, подключался клиентом ftp (вездесущий Total Commander), беспечно создавал каталоги и клал туда файлы. Но один раз, введя в браузере ссылку не на файл, а просто на каталог, я с удивлением обнаружил, что Apache услужливо предоставляет средство просмотра всех папок и файлов моего архива!.. Это совсем не входило в мои планы - в папках я мог положить также и приватную информацию, которую нежелательно видеть посторонним. И только теперь мне стало ясно назначение файлов-заглушек .htaccess и index.htm - они блокируют просмотр содержимого папки http-сервера. Блокировка у этих файлов несколько отличается друг от друга. В файл .htaccess нужно прописывать параметры доступа, и он позволяет гибко настроить доступ к содержимому папки. Но чаще достаточно просто положить в папку файл index.htm, который будет показываться, когда пользователь наберет ссылку в браузере, указывающую на папку. Если файл index.htm в папке есть, то содержимое папки показано не будет, отобразится только код файла index.htm. Можно оставить этот файл пустым (тогда браузер просто покажет белое поле), а можно выполнить что-то более полезное - например, показать сообщение типа "Извините, доступ сюда запрещен" или сделать простую переадресацию [1] на главную страничку сайта.

[Простой способ фильтрации по IP с помощью файла .htaccess]

Можно некоторые особенно важные ссылки (например, доступ в админку) блокировать по IP-адресу. Например, можно в папке, где лежит файл админки (administrator/index.php) создать файл .htaccess с таким содержимым:

Deny from all
Allow from 78.46
allow from 32.101.72.112

Если Ваш IP, с которого Вы пытаетесь открыть админку по ссылке наподобие http://имя_домена/administrator/index.php (т. е. файл, который находится в каталоге administrator, где лежит этот файл .htaccess), не соответствует этим правилам (IP не начинается на 78.46, или не равен 32.101.72.112), то Apache сразу заблокирует доступ с сообщением "Forbidden You don't have permission to access /administrator/index.php on this server.".

[AdminExile

Ссылку по умолчанию на логин в админку (http://имя_домена/administrator) в целях безопасности лучше заменить на секретную, чтобы затруднить взлом и подбор пароля злоумышленником. Это позволяет сделать плагин System - AdminExile.

Работает это следующим образом:

- Ссылка http://имя_домена/administrator теперь отключена. Чтобы попасть на страницу логина в админку, в адресной строке браузера нужно набрать специальную секретную ссылку, она настраивается через секретное слово URL Access Key. Только после ввода секретной ссылки отобразится стандартная форма логина и пароля в панель управления Joomla (Админка).
- В форме авторизации в админку нужно ввести логин и пароль администратора. После этого отобразится не админка, а главная страница сайта.
- В адресной строке браузера нужно снова ввести секретную ссылку, и только тогда Вы попадете в админку Joomla.

Очевидно, что при такой защищенной авторизации практически невозможно получить нелегальный доступ к админке сайта Joomla, так как нужно знать, кроме логина и пароля администратора, еще и секретную ссылку, и ввести её дважды.

Настраивается плагин AdminExile стандартным способом, через меню Расширения -> Плагины. Зайдите в свойства плагина AdminExile, и блоке Настройки -> Параметры плагина -> URL Access Key укажите секретное слово, которое будет участвовать в формировании секретной ссылки. Например, если указать слово sekretnyvhod, то получите секретную ссылку http://имя_домена/administrator/index.php?sekretnyvhod. Проверьте также параметр Redirect URL, он должен быть установлен в {HOME} - при этом все неправильные попытки входа будут редиректиться на главную страницу сайта.

[Ссылки]

1Автопереадресация на другой URL.
2. Joomla: как спрятать приглашение авторизации пользователя?