РефератыИнформатика, программированиеАуАутентификация пользователей

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

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


Лекция


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


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


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


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

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


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


<html>


<head>


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


</head>


<body>


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


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


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


<form action=hello.php>


Имя
: <input type=text name=login> <br>


Пароль
: <input type=password name=pass> <br>


<input type=submit v
а
1ue =
Отправить
><br>


</form>


</body>


</html>


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


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


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

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


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


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


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


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


<?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
создана
<br>";


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


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


//которые могут быть применены ко всем таблицам базы данных 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.


<html>


<head>


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


</head>


<body>


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


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


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


<form method=post action=secretdb.php>


Имя
: <input type=text name=login> <br>


Пароль
: <input type=password name=pass> <br>


<input type=submit v
а
1ue =
Отправить
><br>


</form>


</body>


</html>



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


<?


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


{


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


?>


<html>


<head>


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


</head>


<body>


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


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


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


<form method=post action=secretdb.php>


Имя
: <input type=text name=login> <br>


Пароль
: <input type=password name=pass> <br>


<input type=submit v
а
1ue =
Отправить
><br>


</form>


</body>


</html>


<?


}


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
"<
h
1> Эта страница для зарегистрированных пользователей!</
h
1>";


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


}


else


{


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


echo
"<
h
1> ВНИМАНИЕ!</
h
1>";


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))


{


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


?>


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


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


<form method = post action = "secretdb.php">


<table border = 1>


<tr>


<th>
Имя
</th>


<td> <input type = text name = name> </td>


</tr>


<tr>


<th>
Пароль
</th>


<td> <input type = password name = password> </td>


</tr>


<tr>


<td colspan =2 align = center>


<input type = submit value = "
Вход
">


</td>


</tr>


</table>


</form>


<?


}


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
"<
h
1> Эта страница для зарегистрированных пользователей!</
h
1>";


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


}


else


{


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


echo
"<
h
1> ВНИМАНИЕ!</
h
1>";


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';

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:1855
Символов:21888
Размер:42.75 Кб.