admin
Защита сайта с помощью .htaccess и .htpasswd
2009.04.04 15:54:09

В предыдущих статьях мы рассмотрели общие вопросы безопасности и принципы защиты информации.

Теперь , с моей точки зрения будет уместно, познакомиться с практической реализацией того, как на сайте можно создать зону с ограниченным доступом. Самым простым по реализации способом является защита с помощью встроенной аутентификации WEB-сервера Apache. Самое интересное, что выполненная в своем простейшем варианте данная защита не требует знания никакого языка программирования и обладает достаточной надежностью. Начнем изучение систем аутентификации именно с нее. В данной статье будут подробно описаны шаги и действия, которые Вам необходимо совершить. А в конце статьи будут приведены примеры файлов .htaccess.

 

Аутентификация - процесс, с помощью которого проверяется, что некто является именно тем, за кого он себя выдает. Как правило, проверка включает в себя ввод имени и пароля.

Рассмотрим, как работает базовая аутентификация.

При обращении посетителя в защищаемую директорию, сервер Apache в ответ на запрос посылает заголовок с кодом 401 (401 authentication required header). Любой современный браузер, принимая заголовок с кодом 401, выведет окно с полями для ввода имени пользователя и пароля.

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

Для того чтобы защитить сайт, необходимо выполнить следующую последовательность действий:

1. создать файл с паролями, переписать его на сервер

2. создать файл .htaccess и тоже переписать его на сервер.

Но начнем мы именно с создания файла .htaccess. Этот файл и немного странное для привычных к виду файлов в Windows его написание (точка впереди), пришло к нам из мира UNIX, там такое написание означает, что файл является скрытым или системным. Нам же придется следовать традиции. И так создать файл можно в любом текстовом редакторе. Я пользуюсь для этого встроенным редактором файлового менеджера "FAR". Открываем директорию, в которой нам нужно создать файл, нажимаем на клавиатуре "Shift"+"F4" и в появившемся окне вводим .htaccess нажимаем "Enter" и все готово файл создан!

Если Вы решили создать файл в блокноте, то для того, чтобы блокнот не подставлял автоматически расширение txt, в диалоге сохранения в выпадающем списке "тип файла" следует выбрать опцию "Все файлы".

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

AuthType Basic  
AuthName CMS
require valid-user

Затем, через FTP-доступ, перепишите файл .htaccess на сайт, в директорию CMS, которую вы хотите защитить.

Будьте внимательны - действие файлов .htaccess распространяется не только на ту директорию, где лежит файл, но и на все поддиректории, лежащие ниже. Далее через браузер обратитесь к этой директории. Если Вы защищали директорию CMS и переписали туда файл .htaccess, то для проверки Вам следует вписать в адресную строку браузера следующий URL: http://www.site.ru/CMS/. Если после этого Вам открылся запрос на ввод логина и пароля, то тестирование прошло успешно и можно продолжать защиту директории.

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

Для того, что бы WEB-сервер Apache мог провести аутентификацию пользователя, ему необходим еще один файл, который содержит список логинов и паролей.

Называется этот файл .htpasswd и создается специальной утилитой входящей в поставку сервера. На платформе Windows файл с паролями создается утилитой htpasswd.exe. Если у Вас на машине установлен WEB-сервер Apache, то данная утилита находится в директории с установленным Apache-ем в подкаталоге bin. Если сервер у вас не установлен, то поищите в Интернете.

Для работы с утилитой htpasswd.exe необходим интерфейс работы с командной строкой. Интерфейсом работы с командной строкой обладают такие программы как Far, WindowsCommander и т.п. Здесь будет рассмотрена работа с командной строкой с помощью утилиты cmd, которая входит в поставку Windows 2000/XP и т.п. Нажмите "Пуск"->"Выполнить", введите в строку ввода cmd и нажмите ОК. Вам откроется окно утилиты CMD.

Далее необходимо перейти в директорию, где находится утилита htpasswd.exe и запустить его.

Допустим, сервер Apache установлен в директории с:/Apache, тогда введите в командную строку команду: с:/Apache/bin /htpasswd.exe -cm .htpasswd admin и нажмите ввод.

cm - это ключи для утилиты. Ключ с - указывает, что необходимо создать новый файл с паролями. Если файл с таким именем уже существует, то он будет перезаписан. Ключ m - определяет шифрование по алгоритму MD5. .htpasswd - имя файла с паролями (можете использовать любое имя). admin - имя посетителя, которому будет разрешен доступ в закрытую область сайта. В ответ, должен появиться запрос на ввод пароля и его повтор. Если все правильно, то в завершении появится сообщение: Adding password for user admin. И в директории c:Apache2/bin появится файл .htpasswd, в котором будет находиться строка с именем пользователя и хеш-кодом его пароля. Для того, что бы в тот же файл .htpasswd добавить еще одного пользователя следует убрать ключ -c из команды запуска утилиты htpasswd.exe

htpasswd -m .htpasswd admin

Будьте внимательны - Если файл с паролями не был создан, то возможно, некоторые ключи утилиты не поддерживаются в Вашей операционной системе. Например, иногда не поддерживается ключ m. В этом случае, Вам нужно ввести

htpasswd -c .htpasswd admin
Для того, чтобы посмотреть ключи и параметры работы утилиты введите htpasswd.exe /? Вам будет выдано описание интерфейса.

Итак, файл с паролями создан. Теперь Вам необходимо переписать его на сервер. Файлы с паролями очень желательно класть выше корневой директории сайта - туда, куда не будет доступа посетителям.

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

<Files .htpasswd>
deny from all
</Files>

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

Для защиты директории могут использоваться следующие директивы:

AuthType - Тип используемой аутентификации. Для базовой аутентификации эта директива должна иметь значение: Basic. Именно это значение мы и ставим, другие типы аутентификации мы сейчас рассматривать не будем.

AuthName - Имя области действия аутентификации. Текст, помогающий посетителю понять, куда он пытается получить доступ. Например, может быть написано: "Закрытая зона сайта!"

AuthUserFile - путь к файлу с паролями (.htpasswd).

AuthGroupFile - путь к файлу групп, если он существует.

Require - Одно или несколько требований, которые должны быть выполнены для получения доступа к закрытой области.

Пример файла .htaccess

AuthType Basic  
AuthName "Закрытая зона сайта!"
AuthGroupFile /usr/host/mysite/group
AuthUserFile /usr/host/mysite/.htpasswd
require group admins

Будьте внимательны к директивам - AuthUserFile и AuthGroupFile. В них прописываются абсолютные пути к соответствующим файлам от корня сервера. Относительные пути работать не будут!

Путь от корня сервера, можно узнать, спросив у администрации сервера, либо можно попробовать выяснить его самим. Для этого выполните функцию phpinfo(). На экран будет выведена таблица с данными по установке PHP, в том числе там будут перечислены и переменные окружения сервера. Значение абсолютного пути от корня сервера можно посмотреть в переменных: doc_root, open_basedir, DOCUMENT_ROOT.

Директива Require определяет, кому разрешен доступ к закрытой области. Например, require valid-user - разрешен доступ всем прошедшим проверку require user admin, Vasia - разрешен доступ только посетителям с именами admin, Vasia. Естественно, они должны пройти аутентификацию.

require group admins - разрешен доступ всем пользователям из группы admins Если к защищаемой области сайта должна иметь доступ большая группа людей, то удобно объединить людей в группы, и разрешать доступ, определяя принадлежность посетителя к группе.

Формат файла групп очень прост. Это текстовый файл, каждая строка, которой описывает отдельную группу. Первым в строке должно идти название группы с двоеточием. А затем через пробел перечисляются посетители, входящие в группу. Admins: admin Vasia

Users: guest user

В группу Admins входят посетители с именами admin, Vasia. А группу Users входят посетители с именами guest, user.[/code]

Примеры файлов .htaccess

[p]Доступ всем пользователям, прошедшим авторизацию
AuthType Basic  
AuthName "Закрытая зона сайта!"
AuthUserFile /usr/host/site/.htpasswd
require valid-user

Доступ только пользователям admin и root

AuthType Basic  
AuthName "Закрытая зона сайта!"
AuthUserFile /usr/host/site/.htpasswd
require user admin root

Доступ только пользователей из группы admins

AuthType Basic  
AuthName "Закрытая зона сайта! Вход только для администраторов"
AuthUserFile /usr/host/mysite/.htpasswd
AuthGroupFile /usr/host/mysite/group
require group admins
 


Теги: хостинг поддержка php | PHP


 

Комментировать
Логин:

E-mail:

  Enter text shown in left:
 




хостинг webmoneypaypal хостинг
Хостинг за MastercardХостинг за American ExpressХостинг за VisaХостинг за PayPalХостинг за RobokassaХостинг за Яндекс деньгиХостинг за Webmoney Хостинг за ВебманиХостинг за SMSХостинг за EasyPayХостинг за ElecsnetХостинг за EwalletХостинг за MegafonХостинг за чекиХостинг за MwalletХостинг за RBK деньги Хостинг за RBK Money Хостинг за Bank TransferХостинг через банкХостинг за наличные