Аутентифікація користувачів

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Аутентифікація користувачів

Лекція

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

Прохання до користувача довести свою особистість називається аутентифікацією.

Звичайний метод аутентифікації в 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';

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лекція
56.4кб. | скачати


Схожі роботи:
Аутентифікація користувачів на основі токенів безпеки
Служба захисту користувачів
Вплив мережі Інтернет на користувачів
Охорона праці користувачів компютерів
Система обслуговування користувачів у бібліотеці
Створення облікових записів користувачів
Інтереси користувачів пошукачів в регіонах Росії
Адміністрування користувачів з використанням локальних і глобальни
Розробка програми генеруючої паролі користувачів
© Усі права захищені
написати до нас