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.
Вот вы и защищены. От себя могу еще добавить, что паролирование таким
способом лично мне кажется весьма удобным и надежным. |