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

Описание:
Тип работы: учебное пособие
Трансляция полей формы. Метод аутентификации в Web как требование к посетителям предоставить имя пользователя и пароль. Форма для передачи данных. Использование базу данных для хранения паролей. Разработка сценарий для аутентификации посетителей.
Доступные действия
Введите защитный код для скачивания файла и нажмите "Скачать файл"
Защитный код
Введите защитный код

Нажмите на изображение для генерации защитного кода

Текст:

АУТЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЕЙ

Лекция

Подготовлена Прохоровым В.С.


Просьба к пользователю доказать свою личность называется аутентификацией.

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

1. Форма для передачи данных

Пользователь может в удобной форме ввести уникальное имя и пароль с помощью HTML-документа index.html с элементами диалога — текстовыми полями и кнопкой.

Листинг index.html. Страница с формой

АУТЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЯ

Пожалуйста зарегистрируйтесь

Зарегистрировавшись, Вы получите доступ к защищенной странице.

Имя и Пароль можно получить у администратора.

Имя:

Пароль:

а1ue = Отправить>

После того как пользователь заполнит текстовые поля и нажмет кнопку «Отправить», браузер обратится к сценарию hello.php и передаст их в строке параметров. В атрибуте action тега

задан относительный путь, т. е. сценарий hello.php будет искаться браузером в том же самом каталоге, что и файл form.html.

Осталось определиться, как можно извлечь $login и $pass из строки параметров.

 

2. Трансляция полей формы

 

Независимо от того, каким методом — get или post — воспользовался браузер, РНР сам определяет, какой метод был задействован.

Все данные из полей формы РНР помещает в глобальный массив $_REQUEST.

Значение поля login будет храниться в $_REQUEST["login"], а значение поля pass — в $_REQUEST["pass"].

Чтобы можно было как-то разделить GET-параметры от POST-данных, РНР также создает массивы $_GET и $_POST, заполняя их соответствующими значениями. Массив $_REQUEST представляет собой объединение этих двух массивов.

Листинг hello.php - сценарий извлечения текста из полей формы

if ($_REQUEST["login"]=="root" && $_REQUEST["pass"]=="Z10N0101")

{

echo "Доступ открыт для пользователя $_REQUEST[login]";

}

else

{

echo "Доступ закрыт! При вводе данных была совершена ошибка. Для исправления ошибки нужно вернуться <a href=index.html>назадa>";

}

?>

При создании сценария извлечения текста из полей формы hello.php применена инструкция if-else.

Инструкция if-else — условный оператор. Его формат таков:

if (логическое_выражение)

инструкция_1;

else

инструкция_2;

Действие инструкции следующее: если логическое_выражение истинно, то выполняется инструкция_1, а иначе — инструкция_2.

Как и в любом другом языке, конструкция else может опускаться. В этом случае при получении ложного значения просто ничего не делается.


Если при вводе данных будет совершена ошибка, например, неправильно введен пароль, то доступ будет закрыт:

Рассмотренный код, реализует простой механизм, позволяющий санкционированным посетителям видеть защищенную страницу.

Этот сценарий:

● поддерживает только одно жестко закодированное имя пользователя и пароль;

● хранит пароль в виде простого текста;

● защищает только одну страницу;

● передает пароль в виде простого текста.

 

3. Хранение паролей

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

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

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

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

Базу данных auth и таблицу auth в ней можно создать, подключившись к MySQL как пользователь root и запустив показанный в листинге create_db.php сценарий.

Листинг create_db.php —запросы для создания базы данных auth с таблицей auth

//Создаем базу данных MySQL

//Открыть постоянное соединение с с MySQL-сервером, сервер localhost,

//имя пользователя root, пустой пароль

$link = mysql_pconnect("localhost", "root", "")

or exit("Соединение с MySQL-сервером не создано");

//отправляем запрос текущей активной БД на сервере и

//и создаем базу данных auth

$result=mysql_query("create database auth");

if(!$result) echo"База данных не создана";

//Выбираем БД MySQL auth

$result=mysql_select_db("auth");

if(!$result) echo"База данных не выбрана";

//отправляем MySQL-запрос/query и

//создаем таблицу auth в базе данных auth

$result=mysql_query("create table auth

(

name varchar(16) NOT NULL "",

pass varchar(16) NOT NULL "",

PRIMARY KEY (name)

)TYPE=MyISAM");

if($result) echo "Таблица auth создана
";

//отправляем запрос текущей активной БД на сервере и

//создаем список привилегий,

//которые могут быть применены ко всем таблицам базы данных auth

//пользователем admin с хоста localhost с паролем 12345

$result=mysql_query("grant select, insert, update, delete

on auth.*

to admin@localhost identified by "12345";

");

if($result) echo "Привилегии созданы";

?>

Далее следует определить пользователей, которым будет предоставлен доступ к защищенным ресурсам. Для этого нужно присвоить им login и pass. Создадим двух таких пользователей (оставим прежнего root и добавим нового testuser):

use auth;

insert into auth values

("root", "Z10N0101");

insert into auth values

("testuser", "test123");

Листинг index_1.html - страница с формой для улучшения механизма аутентификации из-за применения MySQL.

АУТЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЯ</b> <b>MySQL

Пожалуйста зарегистрируйтесь

Зарегистрировавшись, Вы получите доступ к защищенной странице.

Имя и Пароль можно получить у администратора.

Имя:

Пароль:

а1ue = Отправить>

Листинг secretdb.php — сценарий извлечения текста из полей формы и сравнение его с текстом из базы данных

if(!isset($_POST["login"])&&!isset($_POST["pass"]))

{

//Посетитель должен ввести имя и пароль

?>

АУТЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЯ</b> <b>MySQL

Пожалуйста зарегистрируйтесь

Зарегистрировавшись, Вы получите доступ к защищенной странице.

Имя и Пароль можно получить у администратора.

Имя:

Пароль:

а1ue = Отправить>

}

else

{

//Подключиться к MySQL

$mysql=mysql_connect("localhost","root","");

if(!$mysql)

{

echo "К базе данных не удалось подключиться.";

exit;

}

//Выбрать нужную базу данных

$mysql = mysql_select_db( "auth" );

if(!$mysql)

{

echo "Нужную базу данных не удалось выбрать.";

exit;

}

//Запрос к базе данных для проверки, существует ли соответствующая запись

$query = "select count(*) from auth where

login = $_POST["login"] and

pass = $_POST["pass"]";

$result = mysql_query($query);

if(!$result)

{

echo "Запрос к базе данных не может быть осуществлен.";

exit;

}

$count = mysql_result( $result, 0, 0 );

if ( $count > 0 )

{

//Комбинация имени и пароля посетителя правильная

echo "<h1> Эта страница для зарегистрированных пользователей!h1>";

echo " Мы рады тому, что Вы посетили нашу страничку.";

}

else

{

// Комбинация имени и пароля посетителя неправильная

echo "<h1> ВНИМАНИЕ!h1>";

echo " Вы ввели неправильно имя и пароль.";

}

}

?>

Проверка того, что пользователь ввел данные, осуществляется функцией isset.

При создании сценария извлечения текста из полей формы hello.php применена инструкция if-else.

Инструкция if-else — условный оператор. Его формат таков:

if (логическое_выражение)

инструкция_1;

else

инструкция_2;

Действие инструкции следующее: если логическое_выражение истинно, то выполняется инструкция_1, а иначе — инструкция_2.

Как и в любом другом языке, конструкция else может опускаться. В этом случае при получении ложного значения просто ничего не делается.

В качестве логического выражения применена логическая функция isset, которая проверяет, установлена ли переменная, логический оператор для проверки булевых условий НЕ (!) и И (and или &&):

(!isset($_POST ["login"])&&!isset($_POST ["pass"]))

Листинг secretdb.php — применение MySQL для улучшения механизма аутентификации.

$name = $_POST["name"]

$password = $_POST["password"]

if(!isset($name)&&!isset($password))

{

//Если имя и пароль не существуют, посетитель должен зарегистрироваться, т.е. ввести имя и пароль

?>

<h1>Пожалуйста зарегистрируйтесьh1>

<p>Зарегистрировавшись, Вы получите доступ к защищенной странице.p>

Имя
Пароль

}

else

{

//Подключиться к MySQL

$mysql = mysql_connect( "localhost", "root", "" );

if(!$mysql)

{

echo " К базе данных не удалось подключиться.";

exit;

}

//Выбрать нужную базу данных

$mysql = mysql_select_db( "auth" );

if(!$mysql)

{

echo " Нужную базу данных не удалось выбрать.";

exit;

}

//Запрос к базе данных, чтобы проверить, существует ли соответствующая запись

$query = "select count(*) from auth where

name = "$name" and

pass = "$password"";

$result = mysql_query( $query );

if(!$result)

{

echo " Запрос к базе данных не может быть осуществлен.";

exit;

}

$count = mysql_result( $result, 0, 0 );

if ( $count > 0 )

{

//Комбинация имени и пароля посетителя правильная

echo "<h1> Эта страница для зарегистрированных пользователей!h1>";

echo " Мы рады тому, что Вы посетили нашу страничку.";

}

else

{

// Комбинация имени и пароля посетителя неправильная

echo "<h1> ВНИМАНИЕ!h1>";

echo " Вы ввели неправильно имя и пароль.";

}

}

?>

Используемую в примере базу данных можно создать, подключившись к MySQL как пользователь root и запустив показанный в листинге 14.3 сценарий.

Листинг 14.3. createauthdb.php —запросы для создания базы данных auth, таблицы auth и двоих пользователей.

create database auth;

use auth;

create table auth (

name varchar(10) not null,

pass varchar(30) not null,

primary key (name)

);

insert into auth values

("user", "pass");

insert into auth values

( "testuser", password("test123") );

grant select, insert, update, delete

on auth.*

to webauth@localhost

identified by "webauth";

Информация о файле
Название файла Аутентификация пользователей от пользователя z3rg
Дата добавления 11.1.2012, 20:16
Дата обновления 11.1.2012, 20:16
Тип файла Тип файла (zip - application/zip)
Скриншот Не доступно
Статистика
Размер файла 103.3 килобайт (Примерное время скачивания)
Просмотров 704
Скачиваний 101
Оценить файл