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

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

  • 27.02.2004
Total
0
Shares
0
0
0
0

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

>

 

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

[аутентификация пользователей на веб-сайтах]материал подготовил: Александр Феоктистов
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

Total
0
Shares
Телеграфировать 0
Поделиться 0
Like 0
Алексей Волков

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

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

  • 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

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

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

Свежие посты
  • 5-55: История компании
    • 01.03.23
  • Рассылка как продукт
    • 24.07.20
  • Google назвал лучшие приложения App Store за 2018 год
    • 14.12.18
  • Онлайн-конференция интернет-магазин от “А до Я” CyberE-com 2018
    • 25.05.18
  • Бесплатная онлайн-конференция по управлению репутацией
    • 04.12.17
Маркетер
  • О проекте
  • Информационное спонсорство
  • Рекламным агентствам
  • Ссылки
(с) ООО "Маркетер". Официальный сайт. Маркетер: Статьи про рекламу, маркетинг, public relations, интернет

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