Защита сайта средствами сервера Apache является одним из самых простых и в то же время достаточно надежных способов.
Для защиты сайта с помощью файлов .htaccess используют директивы аутентификации.
Аутентификация — процесс, с помощью которого проверяется, что некто является именно тем, за кого он себя выдает. Как правило, проверка включает в себя ввод имени и пароля.
Самый простой и доступный способ защиты — базовая аутентификация.
При обращении посетителя в защищаемый каталог сервер Apache в ответ на запрос посылает заголовок с кодом 401 ("authentication required header").
Браузер посетителя принимает заголовок с кодом 401 и выводит окно с полями для ввода имени пользователя и пароля. После ввода имени и пароля эти данные отсылаются назад серверу, который проверяет имя пользователя и пароль. Если все верно, то посетитель получает доступ к ресурсу. Кэширование параметров аутентификации (имя, пароль, область действия) обычно осуществляет только в пределах одного сеанса.
При базовой аутентификации имя пользователя и его пароль передаются в сеть в открытом виде в течение всего сеанса, когда посетитель работает с за-щищенным каталогом.
Злоумышленник может перехватить эту информацию, используя сетевой анализатор пакетов. Данный вид аутентификации не должен использоваться там, где нужна реальная защита коммерчески ценной информации.
Web-сервер Apache поддерживает еще один вид защиты — digest-аутентификацию. При digest - аутентификации пароль передается не в открытом виде, а в виде хеш-кода, вычисленного по алгоритму необратимого шифрования MD5. Поэтому пароль, перехваченный при сканировании трафика, практически невозможно подобрать, особенно если он имеет большую длину. Для использования digest-аутентификации на сервере должен быть установлен специальный модуль — mod_auth_digest.
Для того чтобы защитить сайт, нужно выполнить следующую последовательность действий: создать файл с паролями, переписать его на сервер, создать файл .htaccess с директивами аутентификации и тоже переписать его на сервер в защищаемый каталог.
Создание файла с паролями
Файл с паролями создается утилитой htpasswd.exe. Если на локальной машине установлен Web-сервер Apache, то данная утилита находится в подкаталоге bin корневого каталога сервера.
Для работы с утилитой htpasswd.exe необходим интерфейс работы с командной строкой. Интерфейсом работы с командной строкой обладают такие программы, как Far, Windows Commander и т. п. Рассмотрем работу с командной строкой с помощью утилиты cmd, которая входит в поставку Windows 2000/ХР. В меню Пуск выберите команду Выполнить, введите в строку ввода cmd и нажмите кнопку ОК. В результате будет открыто окно утилиты cmd.
Далее необходимо перейти в каталог, где находится утилита htpasswd.exe. Если сервер Apache установлен в каталог c:/Apache2, тогда следует ввести команду:
cd ../../apache2/bin
После того как осуществлен переход в каталог bin, следует ввести команду Для создания файла с паролем:
htpasswd -cm .htpasswd admin
Здесь: ключи утилиты htpasswd.exe. Ключ с указывает на необходимость создания нового файла с паролями. Если файл с таким именем уже существует, он будет перезаписан. Ключ m определяет шифрование по алгоритму MD5;
htpasswd — имя файла с паролями (можно использовать любое имя);
admin— имя посетителя, для которого создается пароль.
В ответ на введенную команду утилита htpasswd.exe предложит ввести пароль и его подтверждение.
Если оба пароля совпадают, то в завершении отобразится сообщение "Adding password for user admin" и в каталоге c:/Apache2/bin появится файл .htpasswd, в котором будет находиться строка с именем пользователя и хеш-кодом его пароля.
Для того чтобы в тот же файл .htpasswd добавить сведения еще об одном пользователе, следует убрать ключ -с из команды запуска утилиты htpasswd.exe:
htpasswd -m .htpasswd admin
Если файл с паролями не был создан, то, возможно, некоторые ключи утилиты не поддерживаются в текущей операционной системе. Например, иногда не поддерживается ключ -т. Чтобы посмотреть ключи и параметры работы утилиты, следует ввести команду htpasswd.ехе /?.
Итак, файл с паролями создан. Теперь необходимо переместить его на сервер. Файлы с паролями желательно располагать выше корневого каталога сайта, где к нему нельзя получить доступ из окна браузера.
Если это невозможно, то файлы с паролями следует обязательно защитить, например, с помощью директив файлов .htaccess:
deny from all
Созданный файл .htaccess с директивами запрета доступа следует поместить в тот каталог, где находится файл с паролями.
Файл с паролем создан и защищен от несанкционированного доступа. Теперь необходимо создать файл .htaccess, который будет определять параметры аутентификации.
Пример файла .htaccess
AuthType Basic
AuthName "Access denied. Only for administrator!" AuthGroupFile /usr/host/mysite/group AuthUserFile /usr/host/mysite/.htpasswd require group admins
Для защиты каталога используются директивы:
AuthType — тип используемой аутентификации. Для базовой аутентификации эта директива должна иметь значение Basic;
AuthName— имя области действия аутентификации. Текст, помогающий посетителю понять, куда он пытается получить доступ. Например, может быть написано: " Access denied. Only for administrator!";
AuthGroupFile — путь к файлу групп, если он существует;
AuthUserFile — путь к файлу с паролями (.htpasswd);
Require — одно или несколько требований, которые должны быть выполнены для получения доступа к закрытой области.
Рассмотрим директивы AuthUserFile И AuthGroupFile подробнее. В них прописываются абсолютные пути к соответствующим файлам от корня сервера. Относительные пути работать не будут!
Если защита доступа тестируется на локальной машине в операционной системе Windows и в путях к файлам есть пробелы, то пути к файлам следует заключить в двойные кавычки, например:
AuthUserFile "с:/web sites/.htpasswd"
Директива Require определяет, кому разрешен доступ к закрытой области. Например:
require valid-user — разрешен доступ всем прошедшим проверку;
require user admin moder contenter — разрешен Доступ только посетителям с именами admin, moder и contenter. Естественно, они должны пройти аутентификацию;
require group admins — разрешен доступ всем пользователям из группы admins.
Если к защищаемой области сайта должна иметь доступ большая группа людей, то удобно объединить пользователей в группы и разрешать доступ, определяя принадлежность посетителя к группе.
Формат файла групп очень прост. Это текстовый файл, каждая строка кото¬рой описывает отдельную группу. Первым в строке должно идти название группы с двоеточием. А затем через пробел перечисляются посетители, входящие в группу.
Пример файла групп:
admins: admin moder contenter
users: guest user maxim
В Группу admins входят посетители c именами admin, moder и contenter, а в группу users — посетители с именами guest, user и maxim.
Разрешение доступа всем пользователям, прошедшим авторизацию:
AuthType Basic
AuthName "Accesd denied. Only for administrator!" AuthUserFile /usr/host/mysite/.htpasswd require valid-user
AuthType Basic
AuthName " Accesd denied. Only for administrator!" AuthUserFile /usr/host/mysite/.htpasswd require user admin root
AuthType Basic
AuthName " Accesd denied. Only for administrator!"
AuthUserFile /usr/host/mysite/.htpasswd
AuthGroupFile /usr/host/mysite/group
require group admins
AuthType Basic
AuthName " Accesd denied. Only for administrator!"
AuthUserFile /usr/host/mysite/.htpasswd
require valid-user