Авторизация с помощью htaccess (базовая аутентификация)

Июнь 3, 2018 18:16 Admin

Часто при работе с веб-проектами возникает необходимость создания их developer версии для разработки. Поэтому, подобного рода проекты, как правило, должны быть скрыты не только от поисковых машин, но и от случайно или не случайно попавших пользователей. И чтобы не изобретать целый алгоритм для доступа к ресурсу на помощь приходит стандартный алгоритм аутентификации веб-сервера apache, благодаря которому можно быстро защитить, как весь проект, так и его отдельные директории.

Принцип работы базовой аутентификации

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

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

Что требуется для работы аутентификации.

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

AuthType Basic   
AuthName "Private zone. Only for administrator!" 
AuthUserFile /path/to/www/.htpasswd   
require user admin

После этого необходимо создать файл .htpasswd, путь до которого мы как раз и указываем в предыдущем файле. Данный файл хранит в себе информацию с именем пользователя и паролем, который прописывается в формате хеша и выглядит примерно так:

admin:$apr1$5yC6wlzB$9qbRcHkGjk3DjeIbtu6w21

Здесь admin – это имя пользователя, после которого через двоеточие указывается хеш пароля. Сгенерировать данный файл можно с помощью файла htpasswd.exe, который находится в папке с сервером apache по примерно следующему пути /path/to/apache-2.4/bin/, с помощью следующей команды: htpasswd -cm .htpasswd admin

Здесь флаг –c – означает, что требуется создать файл, а m – используемый алгоритм шифрования MD5, он используется по умолчанию, поэтому его указывать не обязательно. Кроме того, можно использовать и другие алгоритмы шифрования, подробную информацию можно получить, если ввести команду без параметров соответственно: htpasswd

Помещаем файл .htaccess в соответствующую директорию (директории) и, если apache установлен, получаем следующий результат (рис.1).

Рис.1 auth basic

Следует понимать, что действие файла .htaccess распространяется на все подпапки нижнего уровня. То есть, поместив данный файл в директорию /admin/, он также будет исполняться и для папок вида /admin/users/ и т.д.

Файл .htpasswd лучше помещать выше корневой директории, куда посторонние пользователи не смогут попасть. Если это невозможно, данный файл следует защитить в .htaccess:

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

Группы

Если к защищенной директории необходимо предоставить доступ множеству людей, удобнее всего разделить их на группы, в соответствии с которыми будет предоставлен доступ.

Admins: admin root 
Users: guest user

В группу admin попадут соответственно admin и root, в группу Users — guest и user.

Итог

Доступ только для пользователя admin

AuthType Basic   
AuthName "Private zone. Only for administrator!" 
AuthUserFile  /path/to/www/.htpasswd   
require user admin

Доступ для всех прошедших авторизацию

AuthType Basic   
AuthName "Private zone. Only for administrator!" 
AuthUserFile  /path/to/www/.htpasswd   
require valid-user

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

AuthType Basic   
AuthName "Private zone. Only for administrator!" 
AuthUserFile  /path/to/www/.htpasswd   
AuthGroupFile /path/to/www/group 
require group admins

Запрет доступа к файлу admin.txt

<Files admin.txt> 
AuthType Basic 
AuthName "Private zone. Only for administrator!" 
AuthUserFile  /path/to/www/.htpasswd 
require valid-user 
</Files>