Как надежно защитить админку сайта.
В первую очередь, давайте разберем самые элементарные методы, способные усложнить жизнь злоумышленника, имеющего виды на ваш сайт. Начнем, пожалуй, с авторизации. Я всем рекомендую использовать в качестве логина, при авторизации на сайте, адрес электронной почты, причем, не тот который указан на сайте в качестве контактного, а известный только вам (условно назовем его "технический"). Объясню почему, обычный логин пользователя злоумышленник может легко определить из подписи к публикациям, записям на форуме или найти в других разделах сайта, а почтовый адрес чаще всего скрыт от публичного просмотра. Следующий момент заключается в изменении стандартного пути к админке. Как это можно сделать? Самое простое и удобное, это переименование файла или папки админ-панели, но не все CMS это позволяют сделать. Например, DataLife Engine (DLE) очень просто позволяет изменить имя файла админки, по умолчанию он лежит в корне и называется admin.php, а путь до него выглядит как www.mysite.com/admin.php, вы можете изменить его название на adminochka_654321.php и в браузере это будет выглядеть уже так www.mysite.com/adminochka_654321.php. Вот еще пример, но уже с переименованием папки, для тех, кто знает такую CMS как PHP Melody. У этой CMS путь к админке по умолчанию выглядит следующим образом -www.mysite.com/admin/ , вы же можете изменить имя этой папки на сервере на свое www.mysite.com/upravlenie/. Для таких популярных CMS как Joomla и WordPress существуют специальные плагины, которые модифицируют путь до панели, добавляя в адрес специальное слово (ключ). В случае с Joomla, путь к админке меняется так: www.mysite.com/administrator/?SlovoKluch, вместо стандартного www.mysite.com/administrator/ (плагины jSecure, AdminExile, Backend Token и т.п.). У WordPress дело обстоит следующим образом, если стандартный путь к админке выглядит так: www.mysite.com/wp-admin/ и www.mysite.com/wp-login.php, то с помощью плагина "Protected wp-login" можно изменить адрес на такой www.mysite.com/wp-login.php?sk=my_secure_key, где my_secure_key любое ваше слово. Метод с плагинами, к сожалению, иногда может подвести, сбой в работе может произойти из-за конфликта с другим плагином или после обновления версии CMS, поэтому будьте внимательны. В любом случае делайте резервную копию перед подобными экспериментами. Конечно не у каждой CMS можно безболезненно переименовать путь к админке, иногда требуется дополнительно вносить изменения в файл конфигурации, а бывает и так, что это не целесообразно по трудозатратам, поэтому стоит использовать проверенный и универсальный метод - метод настройки сервера. Самыми распространенными являются web серверы Apache и IIS.В этой публикации я затрону настройку именно Apache, так как он кросплатформенный и наиболее распространен. Для настройки мы будем использовать служебный файл сервера - .htaccess и вспомогательный файл пароля .htpasswdЗадачи, которые мы будем решать данным способом, две, первая, это дополнительная авторизация с альтернативным паролем и логином и вторая, это ограничение доступа по заданным IP адресам.При создании дополнительной авторизации нам понадобится, для начала, создать сам файл .htaccess. Делается это довольно просто, открываем стандартный "Блокнот" Windows (можно использовать вообще любой другой текстовый редактор) и в нем записываем вот такой код:для DLE подойдет вот такая запись, которая добавляется в имеющийся корневой файл .htaccess
вот такой вариант подойдет для Joomla, файл .htaccess помещается в папку administrator
для защиты папки, а не конкретного файла необходимо в эту папку загрузить файл .htaccess, в котором прописать код, указанный ниже
Хотелось бы обратить внимание на директиву AuthUserFile, которая указывает корневой путь до файла .htpasswd, так как он у всех будет различаться. Для того, чтобы правильно определить корневой путь, необходимо создать php скрипт с таким кодом:
Назовем его root.php, загрузим в корень сайта и запустим, на странице в браузере (www.mysite.com/root.php ) вы увидите свой корневой путь, его и нужно использовать.После создания файла .htaccess, нужно его дополнить файлом, содержащим логин и пароль - .htpasswd, в нем содержатся данные пользователя в следующем виде имя_пользователя:зашифрованный_парольСоздать его можно с помощью утилиты htpasswd.exe, которая входит в состав Windows дистрибутива Apache. Утилита находится в директории C:/Apache2/bin (при условии установки в корень диска C).Для создания файла .htpasswd с помощью утилиты htpasswd.exe необходимо выполнить командной строке следующее:
*- admin, замените своим логином.Для удобства я создал папку у себя на компьютере, в которую положил 3 файла:
после запуска файла pwd.bat, необходимо 2 раза ввести нужный пароль в появившемся окне получаем в результате (пароль был введен 123456)
Существует так же утилита от стороннего разработчика, сильно упрощающая процесс, называется она Encode UNIX Password 1.2
Если у вас есть необходимость дать доступ нескольким пользователям, то вы можете в файл .htpasswd внести каждого с новой строки:
Второй задачей, упомянутой мной выше, является ограничение доступа по заданным IP адресам. Вы можете разрешить доступ к админ-панели только с домашнего и рабочего IP адресов или только с одного из них. Для этого в тот же файл .htaccess необходимо внести дополнительные директивы:конструкция для папки (директории) с двумя разрешенными IP адресами
конструкция для файла с одним разрешенным IP адресом
Чтобы узнать Ваш внешний IP, можно воспользоваться одним из сервисов:YOIP.RUSPEEDTEST.NETЯндекс Интернетометр
В заключение хочу дать несколько советов:1) Создавайте нормальные пароли, содержащие цифры, заглавные и строчные буквы, специальные символы и не меньше 8 символов.2) Самый сложный пароль должен быть от панели хостинга.3) Настройте периодическое создание резервных копий вашего сайта и БД (чем чаще, тем лучше)4) поставьте chmod 444 для всех .htaccess и .htpasswd5) не храните ваши бэкапы БД на хостинге в папках со стандартными названиями, типа backup / backups, либо закрывайте доступ с помощью .htaccess