Статья подробно рассказывает о методах авторизации пользователей. Авторизация на JavaScript. BASIC-авторизация в Apache (.htaccess & .htpasswd). BASIC-авторизация на PHP. К статье прилагаются рабочие файлы с примерами.
================================================================================
О методах авторизации пользователей
--------------------------------------------------------------------------------
Арзамасцев Михаил a.k.a ARMIVIT
E-Mail: armivit (a) email.su
Чать 1. Авторизация на JavaScript
Начнем пожалуй с самого лёгкого вида авторизации - это авторизация при помощи
JavaScript. Специально для тех у кого хостинг лишён возможности использования
PHP, CGI/Perl или стандартных средств Apache, ну типа Narod.Ru, Boom.Ru или
NewMail.Ru.
Принцип прост как две копейки, мы передаём скрипту логин и пароль, он их
соединяет, если нужно добавляет расширение (напр. html) и направляет браузер на
получившийся файл. Жаль только если логин или пасс будут не верными, нас выкинет
на 404, а не на 401 как у нормальных людей :), но думаю это пережить можно.
Ладно, шутки в сторону! Приступим.
Как передать скрипту логин и пароль? Тут несколько способов, например можно
сделать два запроса (логин, пароль) с помощью функции prompt():
var username = prompt('Введите логин','');
var password = prompt('Введите пароль','');
Или можно взять эти данные с input-форм, размещённых на странице:
var username = form.username.value;
var password = form.password.value;
Это как хотите. Далее нужно создать те самые файлы, на которые нас будет
направлять скрипт, и если такой файлик есть - "привет, Админ!", если нет - 404.
Главное при создании каждого файла придумать пасс по заковыристее (это само
собой) и на нём не останавливаться, т. е. если этот файл будет конечным
результатом авторизации - ваш пасс будет светиться в адресной строке, а это не
хорошо. Я советую сделать из него редирект на другую страничку с более
заковыристым названием, ну скажем:
7c6821f54c8d317f86fe12fe007452d5.html
или ещё лучше:
!session_id=7c6821f54c8d317f86fe12fe007452d5.html
:). Если "Админ-интерфейс" планируется не из одной странички, можно сделать
директорию с таким "читаемым" названием, а уже там всё как надо.
Пример парольного файла:
Имя файла: yournameyourpass.html
Содержание:
<html><head>
<meta http-equiv="Refresh" content="0;
URL=7c6821f54c8d317f86fe12fe007452d5.html">
</head></html>
Вот в принципе и всё, готовый скрипт авторизации на JavaScript, в котором я
постарался применить все, о чём говорил в этой статье можно найти в приаттаченом
к статье архиве.
Часть 2. BASIC-авторизация в Apache (.htaccess & .htpasswd)
Ладно, оторвёмся от "не детской" авторизации на JavaScript к более серьёзным
методам защиты информации от несанкционированного доступа, а именно к
стандартной авторизации в Apache с помощью файлов .htaccess и .htpasswd.
Разумеется, в httpd.conf должна быть включена поддержка .htaccess (желательно
"AllowOverride All", хотя нам будет достаточно "AuthConfig"), иначе ничего не
выйдет, но если уж так получилось - непереживай, смотри следующую часть статьи.
И так, для полного комфорта нам понадобятся: текстовый редактор :), и утилита
htpasswd из дистрибутива веб-сервера Apache, для создания парольных файлов
.htpasswd. Если есть доступ к какому-нибуть компу с установленным Apache, эту
тулзу можно взять по адресу /usr/local/apache/bin (хотя apache может быть
установлен и в другом месте), имя файла как не странно htpasswd :).
Для создания парольного файла нужно выполнить:
htpasswd -c .htpasswd yourname
Где: .htpasswd - имя парольного файла (можно не менять), yourname - логин
доступа. После этого в консоли вводится пароль и подтверждение пароля. Всё!
Парольный файлик - готов. Если не охота заморачиваться такими способами, можно
просто создать файл .htpasswd и ручками впечатать туда: yourname:yourpass (где:
yourname - логин, yourpass - пароль), но это крайность, т.к. если твой сайт
находится на общем хостинге, есть вероятность что другие пользователи хостинга
будут мониторить твои логин:пароль. А в случае с использованием htpasswd это
исключено, потому как пароль шифруется методами DES, SHA или MD5 по выбору (MD5
по умолчанию). Конечно, существует много форсилок и DES-методов и MD5, но к
примеру если зашифровать MD5-методом 20-ти символьный пасс (прим. fox++), думаю,
взломщик будет подбирать твой пароль до пенсии :).
Так, парольный .htpasswd готов, дело за малым. Теперь создаём .htaccess и
вписываем туда следующее:
AuthType Basic
AuthName "Member Login"
AuthUserFile "/path/to/.htpasswd"
Require valid-user
Где: "/path/to/.htpasswd" - абсолютный путь до нашего парольного файла, "Member
Login" - сообщение, которое будет в окне ввода логина и пароля, его лучше писать
латинскими буквами, поскольку в некоторых браузерах кириллица некорректно
отображается.
Вроде всё, остаётся лишь залить .htaccess и .htpasswd в "запретную директорию",
обратившись к которой, пользователь, не знающий логина и пароля, не пролезет
дальше стандартной таблички авторизации и сообщения об ошибке 401 :). Так же
приаттачу (если так можно сказать) к статье архив в котором ты найдёшь пример
файлов авторизации и утилиту htpasswd.
Часть 3. BASIC-авторизация на PHP
Сразу хочу сказать, что данный способ более удобен, чем предыдущий, поскольку
его можно использовать на любом веб-сервере с установленным PHP интерпретатором.
Плюс он будет работать на Apache без поддержки .htaccess и .htpasswd (предыдущая
статья) и сможет запаролить не просто целые директории, но и отдельные скрипты.
Вообще суть BASIC-авторизации в следующем:
После обращения пользователя к запароленой директории (или скрипту), веб-сервер
передаёт в HEADER браузера запрос на авторизацию, который выглядит следующим
образом:
WWW-Authenticate: Basic realm="Member Login"
HTTP/1.0 401 Unauthorized
После чего пользователю будет предложено заполнить логин, пароль и передать их
веб-серверу. В случае если запрос на авторизацию был вызван по средствам PHP
скриптов, логин и пароль будут доступны как системные переменные (PHP_AUTH_USER,
PHP_AUTH_PW), это и позволит проверить их подлинность.
Кстати, передать серверу логин и пароль можно не только со стандартной таблички,
но и , например таким образом: Для скрипта авторизации auth.php, на сайте
yoursite.ru – http(s)://yoursite.ru/auth.php , можно будет использовать
http(s)://user:
.php (где USER – это имя пользователя, а
PASS – пароль доступа) для авторизации без ввода логина, пароля.
Примечание: При использовании BASIC-авторизации , рекомендуется включать
поддержку SSL (Secure Sockets Layer, https) в запросах, для безопасной передачи
данных. Если она есть конечно :) , иначе можно передать свои логин и пароль в
чужие ручки.
В общем, думаю с помощью PHP будет несложно добавить в HEADER соответствующий
запрос и проверить какие данные будут содержаться в AUTH-переменных после его
выполнения. Ну и напоследок, как обычно "аттачик" с примерами.