Каталог статей
Поиск по базе статей  
Статья на тему Интернет » Интересное в сети » Различные виды аутентификации пользователей на&nb p;веб-сайтах

 

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

 

 

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

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

загрузка...

 

 

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

Самый простой способ, не требующий практически никаких усилий от администратора — базовая аутентификация средствами сервера Apache. Для этого нужно сначала создать файл с паролями с помощью утилиты htpasswd, которая находится в каталоге bin сервера. Допустим, вы хотите закрыть паролем раздел /redir.php?url=test.auth%2Fbase%2F%2C который соответствует локальному каталогу /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 "Вы авторизованы!";
?>

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

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




Статья получена: hostinfo.ru
загрузка...

 

 

Наверх


Постоянная ссылка на статью "Различные виды аутентификации пользователей на&nb p;веб-сайтах":


Рассказать другу

Оценка: 4.0 (голосов: 16)

Ваша оценка:

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

Имя:
Сообщение:
Защитный код: включите графику
 
 



Поиск по базе статей:





Темы статей






Новые статьи

Противовирусные препараты: за и против Добро пожаловать в Армению. Знакомство с Арменией Крыша из сэндвич панелей для индивидуального строительства Возможно ли отменить договор купли-продажи квартиры, если он был уже подписан Как выбрать блеск для губ Чего боятся мужчины Как побороть страх перед неизвестностью Газон на участке своими руками Как правильно стирать шторы Как просто бросить курить

Вместе с этой статьей обычно читают:

Лечение различных видов стоматита

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

» Заболевания - 5029 - читать


Учет различных видов платежных средств при построении финансового плана

ITeam - технологии корпоративного управления" / Борис Дука, ИКФ "АЛЬТ" Вначале определимся с терминологией. Под финансовым планом компании мы понимаем три прогнозных формы: отчет о прибыли, отчет о движении платежных средств и прогнозный баланс. Эти формы могут называться и по-другому — это не суть важно.

» Управление и менеджмент - 1883 - читать


Достоинства и недостатки различных видов технической теплоизоляции.

Вопрос применения теплоизоляционных материалов в последнее время уже не вызывает недоумения: «А зачем это надо?». Но в то же время возник ряд спорных моментов, нюансов и заблуждений. Имея значительный опыт продаж различной технической теплоизоляции, мы попытаемся дать свое видение достоинств и недостатков различных видов технической теплоизоляции.

» Разное - 2894 - читать


Лечение различных видов стоматита у детей

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

» Питание и уход за младенцами - 7592 - читать


Сравнение различных видов ламп

Вот и уходят в прошлое старые добрые лампы накаливания. И теперь предстоит решить, чем же их заменить, тем более что есть из чего выбирать. На прилавках магазинов представлены и галогеновые, и энергосберегающие, и светодиодные лампочки.

» Строительство и ремонт - 4043 - читать



Статья на тему Интернет » Интересное в сети » Различные виды аутентификации пользователей на&nb p;веб-сайтах

Все статьи | Разделы | Поиск | Добавить статью | Контакты

© Art.Thelib.Ru, 2006-2024, при копировании материалов, прямая индексируемая ссылка на сайт обязательна.

Энциклопедия Art.Thelib.Ru