Маркетер
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
YouTube 150 Подписчики
Telegram 241 Подписчики
VK 0 Подписчиков
Маркетер
Маркетер
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
  • PHP

Различные виды аутентификации пользователей на веб-сайтах

  • 27.02.2004

Автор статьи: Александр Феоктистов

>

 

Различные виды аутентификации пользователей на веб-сайтах

[аутентификация пользователей на веб-сайтах]материал подготовил: Александр Феоктистов
27.02.2004
 

Практически у любого интернет-ресурса рано или поздно появится необходимость в аутентификации пользователей. Если даже рядовые посетители не должны у вас регистрироваться, то для администраторского интерфейса аутентификация нужна, иначе никто не может гарантировать вам безопасность сайта. На самом деле, задача авторизации пользователей далеко не тривиальная, и здесь существует множество способов. Мы рассмотрим самые известные из них и пройдем путь «от простого к сложному», чтобы вы могли выбрать метод, который вам больше всего подходит.

В наших попытках мы возьмем за данность, что на вашем сервере установлено самое популярное ныне программное обеспечение: веб-сервер Apache, компилятор PHP 4 и система управления базами данных MySQL.

Базовая аутентификация Apache

Самый простой способ, не требующий практически никаких усилий от администратора — базовая аутентификация средствами сервера Apache. Для этого нужно сначала создать файл с паролями с помощью утилиты htpasswd, которая находится в каталоге bin сервера. Допустим, вы хотите закрыть паролем раздел http://test.auth/base/, который соответствует локальному каталогу /usr/home/test.auth/www/base/. Для этого вводим команду:

htpasswd -c /usr/home/test.auth/www/base/passwords admin

Команда создаст новый файл с паролями и внесет туда пользователя admin, пароль для которого вас попросят ввести здесь же.

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

AuthType Basic
AuthName «Область для избранных»
AuthUserFile /usr/home/test.auth/www/base/passwords
Require user admin

Теперь, если вы попробуете войти в защищенную область, система попроcит вас ввести имя и пароль. А в поле Require user после пользователя admin через пробел можно добавить еще несколько пользователей, которым будет дан доступ в закрытую область. Вроде бы все работает, но это примитивный способ аутентификации: вы не можете закончить работу, сессия обрывается только после закрытия браузера, а также никак не можете разграничивать права пользователей просто потому, что вы их не знаете. Ниже мы предлагаем вам более продвинутый метод авторизации.

Базовая аутентификация с использованием базы данных

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

Здесь мы не станем рассказывать, как работать с MySQL, потому что этому были посвящены другие материалы на этом сайте. Давайте создадим таблицу users c полями «login», «password» и «fio», после чего добавим в нее несколько записей. Только не забывайте пароль добавлять в виде зашифрованной (MD5) строки. Эти операции удобно производить с помощью системы phpMyAdmin, которая в большинстве случаев установлена на вашем хостинге. После этого на каждую защищаемую страницу (или в файл шаблона) нужно добавить следующие строки:

<?
mysql_connect
(‘localhost’, ‘root’);
mysql_select_db(‘user’);
$result = mysql_query(«SELECT * FROM users WHERE login='». $PHP_AUTH_USER. «‘ AND password='». md5($PHP_AUTH_PW). «‘»);
if (@
mysql_num_rows($result)!=1) {
header(«WWW-Authenticate: Basic realm=\»Для избранных\»»);
header(«HTTP/1.0 401 Unauthorized»);
print(
«Чтобы войти в пользовательскую часть сайта, надо ввести имя и пароль.»);
print

«
login: «
.$PHP_AUTH_USER.«
password: «
.$PHP_AUTH_PW.«
md5: «
.md5($PHP_AUTH_PW);
exit();
};

$user_row = mysql_fetch_array($result);
echo
«Здравствуйте, «.$user_row[‘fio’].«!»;
?>

Данная конструкция определит пользователя, возьмет из базы его имя и «поздоровается» с ним. Разумеется, целью нашей аутентификации было не проявление вежливости, но дальше уже можно делать все, что угодно: определять права пользователя на данный файл (эту информацию тоже можно вписать в базу и брать ее оттуда), отправлять его на личную страницу и так далее. Перед вами открываются все возможности работы с PHP и MySQL. При этом пароль в базе не хранится в открытом виде, и даже в случае кражи зашифрованной строки, подобрать его будет практически невозможно. Средствами PHP можно организовать процедуру изменения личной информации самим пользователем, а администратором, соответственно, всех пользователей. Однако это не тема нашего материала, и заострять внимание на этих операциях мы не станем.

Аутентификация с помощью Cookies

В то время как пользователь заходит на ваш сервер, вы имеете возможность положить к нему на компьютер маленький файл, называемый «Cookie». В другой раз вы сможете скачать его обратно и просмотреть записанную в нем информацию. Это часто используется для того, чтобы «узнавать» пользователя по имени во время разных заходов на сайт. Но наша задача несколько сложнее — нам нужно обеспечить не только «узнавание» пользователя, но и реализовать на основе «cookies» весь механизм аутентификации. Начнем с планирования.

Сразу объясним, что с помощью этого метода мы сможем избавиться от стандартной формы ввода логина и пароля и реализовать все в красивую формочку, аккуратно вписанную в дизайн вашего сайта. После ввода логина и пароля в нее и нажатия кнопки «Submit» пользователю будет отправлен «cookie» c логином и паролем. После этого при входе на каждую защищенную страницу этот файл будет скачиваться, и с помощью MySQL проверяться правильность данных. Разумеется, так как «cookie» — это такой же файл, как и остальные на компьютере пользователя, его можно украсть и прочесть в нем пароль. Поэтому мы должны шифровать его — например, знакомым нам ключом MD5. Правда, и в этом случае будет вероятность кражи «cookie», но если мы сделаем время ее жизни небольшое, а еще лучше, если будем выдавать при каждом входе на страницу новую, то вероятность взлома будет минимальна. В последнем случае нужно будет, разумеется, к паролю добавлять время, чтобы шифрованная строка была все время разной. Мы осуществим только первую часть плана — будем записывать в «cookie» зашифрованный пароль, в большинстве случаев этого будет вполне достаточно.

Ниже идет код php-скрипта, который будет принимать из формы логин и пароль. Они соответственно располагаются в переменных login и password. Задача скрипта проверить правильность ввода данных и выдать пользователю соответствующий «cookie». Кстати, добавьте в вашу базу данных еще одно поле — lastlogin, в нем мы будем хранить время последнего обращения к сайту.

<?
mysql_connect
(‘localhost’, ‘root’);
mysql_select_db(‘user’);

$login_result = mysql_query(«SELECT login FROM users WHERE login=’$login’ AND password='». md5($password). «‘»);

if (!mysql_error() && @mysql_num_rows($login_result)==1) {

setcookie(oursitelogin, $login, time()+1800, $COOKIE_PATH);
setcookie(oursitepass, md5($password), time()+1800, $COOKIE_PATH);

header(«Location: /cookie/index2.php»);
exit;
}
elseif (!
mysql_error()) {

print («Неправильный логин или пароль.»);
}
else
print (
mysql_error());
?>

После этого в каждом защищаемом файле нужно добавить код, который будет проверять правильность пароля, хранимого в «cookie» у пользователя. Если у него нет такого файла, или данные в нем неверны, то посетителя направят на страницу ввода пароля.

<?
mysql_connect
(‘localhost’, ‘root’);
mysql_select_db(‘user’);

$login = $HTTP_COOKIE_VARS[‘oursitelogin’];
$login_result = mysql_query(«SELECT login FROM users WHERE login=’$login’ AND password=’$HTTP_COOKIE_VARS[oursitepass]‘»);

if (!mysql_error() && @mysql_num_rows($login_result)!=1) {

header(«Location: /»);
exit;
}
else
print (
mysql_error());
print
«Вы авторизованы!»;
?>

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

Аутентификация с использованием сессий

На низком уровне механизм сессий использует работу с теми же cookies-файлами, но для системного администратора или программиста работа эта более прозрачна и удобна. Сессии позволяют идентифицировать пользователя, а нам с вами останется «прикрутить» к этой структуре только наш модуль аутентификации пользователей.

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

<?
mysql_connect
(‘localhost’, ‘root’);
mysql_select_db(‘user’);

$login = $HTTP_POST_VARS[«login»];
$pass = $HTTP_POST_VARS[«password»];

$user_result = mysql_query(«SELECT * FROM users WHERE login=’$login’ AND password='». md5($pass). «‘»);

if (mysql_error())
die(
mysql_error());

elseif (@mysql_num_rows($user_result) != 1)
$error = «Неверное имя пользователя или пароль.»;

else {
$user = mysql_fetch_assoc($user_result);

session_set_cookie_params(1800, «/»);
session_start();
session_register(«user»);
// Устанавливаем время жизни сессии в 30 минут, стартуем ее и просим запоминать логин и пароль пользователя далее в массиве $user.

header(«Location: /session/index2.php»);
};

if (isset($HTTP_COOKIE_VARS[session_name()]))
setcookie(session_name());
?>

Теперь нам нужно на каждую страницу добавить скрипт проверки правильности сессии. В принципе, все аналогично работе с cookie-файлами. Для того чтобы было понятно, я добавлю комментарии в сам код скрипта:

<?
mysql_connect
(‘localhost’, ‘root’);
mysql_select_db(‘user’);

unset($user);
// В эту переменную мы запишем true, если возникнет какая-то ошибка.
$session_error = false;

// Если у пользователя нет открытой сессии, то выдаем ошибку.
if (!isset($HTTP_COOKIE_VARS[session_name()]))
$session_error = true;

else {
session_start();
session_register(«user»);

if (!isset($user[«login»]) || !isset($user[«password»]))
$session_error = true;
};

if (!$session_error) {

$user_result = mysql_query(«SELECT * FROM users WHERE login=’{$user[login]}‘ AND password=’{$user[password]}‘»);

if (mysql_error() || @mysql_num_rows($user_result) != 1)
$session_error = true;
};

// если была какая-то ошибка, то
if ($session_error) {

// уничтожаем данные сессии
session_destroy();

if (!isset($HTTP_COOKIE_VARS[session_name()]))
setcookie(session_name(),«»,«/»);

// отправляем пользователя на вход
header(«Location: /»);

// прекращаем работу
exit();
};

mysql_free_result($user_result);
echo
«Вы авторизованы!»;
?>

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

Ссылки по теме

  • Сайт сервера Apache
  • Русскоязычный сайт, посвященный программированию на PHP

 

Первоисточник — www.hostinfo.ru

Алексей Волков

Предыдущий материал
  • Управление и организация бизнеса

Увеличение доходов

  • 26.02.2004
  • Алексей Волков
Read More
Следующий материал
  • Управление и организация бизнеса

Факторинг

  • 04.03.2004
  • Алексей Волков
Read More
Вас также может заинтересовать
Read More
  • Codeigniter

Создание собственного обработчика 404 ошибок в CodeIgniter

  • jokar
  • 07.10.2012
Read More
  • PHP
  • Готовые скрипты

Загрузка нескольких файлов одним браузером

  • jokar
  • 14.06.2010
Read More
  • PHP

Переход на шаблонный дизайн

  • Алексей Волков
  • 10.02.2006
Read More
  • PHP

Экстремальный стиль для PHP

  • Алексей Волков
  • 29.12.2005
Read More
  • PHP

Секреты PHP-функций для работы с массивами. Обработка данных и сортиров

  • Алексей Волков
  • 15.11.2005
Read More
  • PHP

Секреты PHP-функций для работы с массивами. Создание массивов

  • Алексей Волков
  • 31.08.2005
Read More
  • PHP

PHP: секреты файла php.ini. Часть 4

  • Алексей Волков
  • 04.08.2005
Read More
  • PHP

PHP: секреты файла php.ini. Часть 3

  • Алексей Волков
  • 29.07.2005

Добавить комментарий

Для отправки комментария вам необходимо авторизоваться.

Свежие посты
  • Дайджест постов Сергея Людкевича
    • 12.09.24
  • Как юристы тормозят бизнес
    • 30.08.24
  • Продвижение оптовых кампаний в Яндекс Директ
    • 06.03.24
  • Cарафанное радио
    • 13.01.24
  • 5-55: История компании
    • 01.03.23
Маркетер
  • О проекте
  • Информационное спонсорство
  • Рекламным агентствам
  • Ссылки
(с) ООО "Маркетер". Официальный сайт. Маркетер: Статьи про рекламу, маркетинг, public relations, интернет

Введите ключевые слова для поиска и нажмите Enter