FoxWeb

софт для студентов
Искать здесь

О методах авторизации пользователей

Раздел: Интернет, веб-технологии Автор: ARMIVIT
E-mail: спаму - нет! Www: http://hooligan.org.ru
Просмотров: 8933 Дата: 04.08.2005
Статья подробно рассказывает о методах авторизации пользователей. Авторизация на 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-переменных после его
выполнения. Ну и напоследок, как обычно "аттачик" с примерами.

Комментарии

o) 01.06.2007 21:41:48 #
круто
k0t 24.05.2008 22:57:22 #
спс чел :D

Оставить комментарий

Ваше имя

Ваш комментарий

Код   Защитный код. Если вы не видите здесь рисунок - обновите страницу.
Оценка   

Заметки по этой теме