Документ Без Имени

Приветствую Вас Гость RSS

Не бойся, что не знаешь - бойся, что не учишься. - Китайское изречение

Среда, 27.11.2024, 07:36
Главная » Статьи » PHP » Статьи

Простейшая авторизация

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

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

Итак, будем пользоваться обычной аутентификацией - окном для ввода 
пароля, какое используется, например, на Rambler и множестве других 
сайтов.

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

А выглядит это вот так:


if(!isset($PHP_AUTH_USER))
// пользователь неизвестен
{
Header("WWW-Authenticate: Basic realm="Admin Center"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
else 
// пользователь известен, неизвестен пароль
{
// введенный пароль
$password = "$PHP_AUTH_PW";

// просмотр базы для получения реального пароля
$link = mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname);

$result=mysql_query("SELECT password FROM auth WHERE name="$PHP_AUTH_USER"");
$row=mysql_fetch_array($result);

// проверка
if ($row==NULL) // пользователя с таким именем нет в БД, выходим
{
Header("WWW-Authenticate: Basic realm="Admin Center"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
else // пользователь с таким именем есть в БД, проверка пароля
{
$real_password="$row[password]";
if ($real_password!=$password)
{
Header("WWW-Authenticate: Basic realm="Admin Center"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
}
}

?>

// далее следует код самой страницы

Введенный пользователем логин хранится в переменной $PHP_AUTH_USER, 
пароль - в $PHP_AUTH_PW. Кстати, обратите внимание на проверку 
существования записи пользователя с таким именем в БД - это критический 
момент, который учитывать весьма важно. В случае, если такой проверки не 
будет, это приведет к плачевным результатам - $row[password] будет равно 
нулю, то есть введя несуществующее имя пользователя и пустой пароль можно 
будет попасть в защищенную зону.

Между инструкциями Header("HTTP/1.0 401 Unauthorized"); и exit(); 
вставляем что угодно - от простой фразы о том, что сюда нельзя до 
предложения куда-нибудь сходить, слетать, сбегать, сползать и так далее. 
Да, чуть не забыл - в переменных $dbhost, $dbuser, $dbpasswd и $dbname 
хранятся данные, обеспечивающие доступ к базе и имя базы.

Подобный код необходимо вставить на каждую страницу защищенной зоны, 
например, через include.

Вот вы и защищены. От себя могу еще добавить, что паролирование таким 
способом лично мне кажется весьма удобным и надежным.

Категория: Статьи | Добавил: АлексейНиколаевич (28.12.2010)
Просмотров: 863 | Теги: Авторизация | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: