Для посещения тех или иных разделов на некоторых сайтах требуется ввести логин и
пароль. Как можно реализовать нечто подобное на собственном сайте и какие вообще есть способы ограничения доступа «людям с улицы» к части содержимого сайта?
Простым способом ограничения доступа
к разделу сайта является использование
стандартных средств веб-сервера Apache.
Организация закрытой области на
веб-узле требует наличия ряда директив
в конфигурации сервера (а именно в
блоке «Directory», определяющем свойства нужной нам директории, или же в
файле управления доступом .htaccess,
расположенном в ней). Закрыть паролем
можно только целый каталог (со всеми
подкаталогами, если таковые существуют), но не какой-то отдельный файл.
Отметим, что разрешить в файлах
.htaccess директивы, связанные с авторизацией, можно путем добавления в блок
«Directory», соответствующий нужному
каталогу, следующей строки:
AllowOverride +AuthConfi
Директивы для создания закрытой области
Рассмотрим управление авторизацией
при помощи файла .htaccess. Этот файл
необходимо расположить в той директории, к которой планируется ограничить
доступ через Веб. Его примерное содержимое должно быть таким:
AuthName "Private Zone"
AuthType Basic
AuthUserFile путь_к_файлу_.htpasswd
require valid-user
Директива AuthName определяет имя
закрытой области, которое выводится в
диалоге авторизации в браузере.
При помощи AuthType устанавливается
тип авторизации, планирующейся к использованию в каталоге. В большинстве
случаев применяется метод Basic.
Директива AuthUserFile определяет
местонахождение файла, содержащего
имена пользователей и пароли для доступа к закрытой области. Обычно файл па-
ролей называют именем .htpasswd. В значении должен быть указан полный путь к
файлу — чаще всего он выглядит так:
/pub/home/mywebsite/auth/.htpasswd.
Директива require указывает, кто может иметь доступ к данному каталогу.
Значение valid-user говорит о том, что
доступ к закрытой области могут получить все пользователи, перечисленные в
файле, определенном при помощи директивы AuthUserFile, предоставив пра-
вильный пароль. Помимо valid-user, могут быть использованы ключевые слова
«user» или «group» с явным перечислением имен пользователей или групп, которым требуется разрешить доступ.
Размещение файла паролей
Из соображений безопасности не рекомендуется размещать файл паролей
(.htpasswd) в тех директориях, которые
так или иначе доступны через Веб — скажем, в пределах корня документов (этот
каталог содержит в себе все веб-страницы и называется обычно www или public_
html) или в каталоге, назначенном
для CGI-скриптов (usr-cgi или cgi-bin).
Лучше всего, если это позволено
администрацией хостинга, создать каталог (например, с названием auth,) за
пределами корня документа сервера и
поместить туда файл паролей.
Создание файла паролей
Файл паролей имеет такую структуру:
username1:password1
username2:password2
...
usernameN:passwordN
Для шифровки паролей часто используется криптоалгоритм MD5. Шифровка
представляет собой необратимую операцию: восстановить исходный пароль по
его зашифрованному виду невозможно.
При проверке правильности пароля происходит зашифровка введенных пользователем символов с использованием того
же криптоалгоритма, после чего результат сравнивается с образцом, хранящимся в файле паролей.
Файл паролей проще подготовить утилитой htpasswd, которая входит в комплект поставки Apache (после установки
размещается в директории bin). Ее, впрочем, можно найти в Интернете отдельно
от сервера. В том числе в версии, скомпилированной для Windows.
Утилита работает в консольном режиме. Чтобы создать файл паролей и добавить в него первого пользователя, нужно
ввести примерно следующую команду:
htpasswd -bcm .htpasswd username password
Если вы не хотите вводить пароль в командной строке из соображений безопасности, откажитесь от ключа -b:
htpasswd -cm .htpasswd username
В этом случае htpasswd попросит указать пароль в диалоговом
режиме, маскируя вводимые символы звездочками, и переспросит его еще раз для подтверждения.
Если файл паролей уже создан и вам нужно добавить в него
нового пользователя, из команды следует исключить ключ -c:
htpasswd -bm .htpasswd username password
Ключ -m определяет алгоритм шифрования — MD5.
В Windows он используется по умолчанию. Если хочется использовать другой алгоритм, нужно применить другие ключи:
-d соответствует функции CRYPT, а -s — алгоритму SHA.
Пароль должен состоять не менее чем из восьми знаков. Лучше всего, если в них будут чередоваться прописные и строчные
буквы с цифрами, к примеру, так: L8xo5TrDq.
Поисковикам от ворот поворот
Еще одна задача, связанная с ограничением доступа — запрет
индексации тех или иных частей сайта поисковыми роботами.
Самый простой способ реализовать запрет индексации — использование файла robots.txt, который помещается в корень
документов сервера (он должен быть доступен по протоколу
HTTP по локальному URL /robots.txt).
Файл robots.txt должен содержать одну или несколько записей, разделенных пустыми строками. Каждая запись состоит из
строк в формате «Название_поля: значение». Названиями полей могут быть «User-Agent» и «Disallow»; запись должна начинаться с «User-Agent» и содержать в себе хотя бы по одной
строке «User-Agent» и «Disallow». Значениями User-Agent могут
быть названия поисковых роботов (если их несколько, разделяются пробелами). «Звездочка» означает, что «правила поведения» относятся ко всем поисковым роботам. Значениями поля «Disallow» должны являться локальные URL, запрещенные
к индексации (если их несколько, разделяются пробелами).
Такой файл robots.txt запрещает к индексированию локальные URL /cgi-bin/ и /includes/ для всех поисковых роботов:
User-Agent: *
Disallow: /cgi-bin/ /includes/
Индексацию всех без исключения документов сайта можно
запретить, используя такой файл robots.txt:
User-Agent: *
Disallow: /
ижеприведенный robots.txt никому ничего не запрещает:
User-Agent: *
Disallow:
Существует еще один инструмент контроля доступа —
директивы allow, deny и order модуля mod_access веб-сервера
Apache, которые, в частности, позволяют закрыть доступ к тем
или иным директориям для определенных хостов, но об этом —
как-нибудь в следующий раз.
Источник: Журнал "CHIP"