Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Виконання аутентифікації користувачів засобами керування сеансом у РНР

Поиск

PHP (РНР Hypertext Preprocessor) - це серверна мова створення сценаріїв, розроблена спеціально для Web. В HTML-сторінку можна впровадити код РНР, що буде виконуватися при кожному її відвідуванні. Код РНР інтерпретується Web-сервером і генерує HTML або інший вивід, спостережуваний відвідувачем сторінки. Синтаксис РНР ґрунтується на інших мовах програмування, у першу чергу на С та Perl.

HTTP-Протокол іноді називають «протоколом без стану». Це означає, що даний протокол не має убудованого способу підтримки стану між двома транзакціями. Коли користувач запитує один за одним дві сторінки, HTTP не забезпечує можливості повідомити, що обидва запити виходять від того самого користувача. Це ускладнює перенесення між сторінками введених користувачем даних, таких як дані аутентифікації.

Таким чином, ідея керування сеансами полягає у забезпеченні відстеження користувача протягом одного сеансу зв'язку з Web-сайтом.

Реалізація керування простим сеансом

Основними етапами використання сеансу є наступні:

- запуск сеансу;

- реєстрація змінних сеансу;

- використання змінних сеансу;

- скасування реєстрації змінних і закриття сеансу.

Всі перераховані етапи не обов'язково можуть міститися в одному сценарії, і деякі з них можуть перебувати в декількох сценаріях. Розглянемо кожний із цих етапів послідовно.

Запуск сеансу

Перш ніж можна буде скористатися функціональними можливостями сеансу, варто запустити сам сеанс. Існує кілька способів зробити це.

Але найпростіший полягає в тому, що сценарій починається з виклику функції:

Session start ();

Ця функція перевіряє, чи існує ідентифікатор поточного сеансу. Якщо ні, вона його створює. Якщо ж ідентифікатор поточного сеансу вже існує, вона завантажує зареєстровані змінні сеансу.

Реєстрація змінних сеансу

Для того щоб одержати можливість відслідковувати змінні від одного сценарію до іншого, їх необхідно зареєструвати. Це робиться шляхом виклику функції session_register (). Наприклад, для реєстрації змінної $myvarзастосовується наступний код:

$myvar=5; session register("myvar");

Даний оператор реєструє ім'я змінної й відслідковує її значення. Відстеження змінної буде здійснюватися, поки не завершиться сеанс, або поки вручну не відміниться її реєстрація.

За один прийом можна зареєструвати більше одної змінної, передавши розділений комами список імен змінних:

Session register ("myvar1","myvar2");.

Використання змінних сеансу

Щоб зробити змінну сеансу доступною для використання, спочатку необхідно запустити сеанс.

Після цього з'являється доступ до цієї змінної. Якщо включено опцію register_globals, то доступ до цієї змінної можна одержати через скорочену форму її ім'я, наприклад, $myvar. Якщо ж згадана опція не включена, одержати доступ до змінноїо можна через асоціативний масив$HTTP_SESSION_VARS, наприклад, $HTTP_SESSIQN_VARS["myvar”].

Перевірити, чи є змінна зареєстрованою змінною сеансу, можна звернувшись до функції session_is_registered(). Виклик функції виконується в такий спосіб:

$result=session_is_registered("myvar");

Ця функція перевірить, чи є $myvarзареєстрованою змінною сеансу, і поверне trueабо false.

Можна зробити іншим шляхом – перевірити масив $HTTP SESSION_VARSна предмет наявності в ньому змінної.

Скасування реєстрації змінних і завершення сеансу

Після закінчення роботи зі змінною сеансу її реєстрацію можна скасувати, скориставшись функцією session unregister():

session unregister ("myvar");

Подібно функції реєстрації, ця функція вимагає вказівки ім'я змінної, реєстрацію якої необхідно відмінити, у вигляді рядка, що не включає символ $. Дана функція за один раз може відмінити реєстрацію тільки однієї змінної сеансу. Однак, для скасування реєстрації всіх змінних поточного сеансу можна звернутися до session_unset().

По завершенню сеансу спочатку буде потрібно скасувати реєстрацію всіх змінних, а потім викликати

session_destroy ();

для обнуління ідентифікатора сеансу.

Приклад сеансу

Загалом кажучи, найкращі функціональні можливості механізму керування сеансами забезпечуються за рахунок аутентифікації за допомогою бази даних MySQL.

Приклад включає три простих сценарії. Перший, index.php, забезпечує форму для вхідної реєстрації й аутентифікації користувачів Web-сайту. Другий, secret.php, представляє інформацію тільки для тих користувачів, які успішно пройшли вхідну реєстрацію. Третій, logout.php, реалізує вихід користувача із системи.

Вихідна сторінка, відображувана сценарієм index.php, надає користувачеві можливість увійти в систему. У випадку якщо він почне спробу отримати доступ до секрет­ної сторінки, не пройшовши вхідну реєстрацію, буде видане відповідне повідомлення.

Якщо ж користувач спочатку пройшов вхідну реєстрацію (з ім'ям користувача: test і паролем: test), а після цього спробував ввійти на секретну сторінку, він побачить попереджувальне повідомлення.

Подивимося на код додатка. Більша частина коду зосереджена в сценарії index.php.

<?php

session_start ();

if (isset ($userid, $password))

if ($userid && $password)

{

if ($userid=="test" && $password=="test")

{

$valid_user = $userid; session_register("valid_user");

}

}

?>

<html>

<body>

<?php

if (session_is_registered ("valid_user"))

{

echo "Ви зареєстровані в системі як". $valid_user. "<br>";

echo "<a href=\"logout.php\">Log out</a><br>";

}

else

{

if (isset ($userid))

{

// якщо користувач намагався зареєструватися,

//але виникла помилка

echo "Неможливо ввійти";

} else

{

// якщо користувач або не намагався зареєструватися,

// або покинув сайт

echo "Ви не зареєстровані в системі. <br>";

}

//provide form to log in

echo "<form method=post action=\"index.php\">";

echo "<table>";

echo "<tr><td>Логін:</td>";

echo "<td><input type=text name=userid></td></tr>"; echo <tr><td>Пapoль:</td>”;

echo "<td><input type=password name=password></td></tr>";

echo "<tr><td colspan=2 align=center>";

echo "<input type=submit value=\"Увійти\"></td></tr>";

echo "</table></form>";

}

?>

<br>

<a href="secret.рhр">Секретна сторінка</а>

</body>

</html>

Даний сценарій вирізняється складною логікою, але інакше не можна: адже він здійснює подання форми для вхідної реєстрації і її обробку.

Робота цього сценарію зосереджена навколо змінної сеансу $valid_user. Основна ідея тут полягає в наступному: якщо хто-небудь успішно пройшов процедуру вхідної реєстрації, ми реєструємо змінну сеансу з ім'ям $valid_user, що містить ідентифікатор користувача.

Першим в сценарії виконується виклик session start(). Ця функція завантажує змінну сеансу $valid_user, якщо остання була зареєстрована.

При першому проході по сценарію жоден з умовних операторів ifне спрацює й користувачеві до кінця сценарію залишиться лише уважно прочитати повідомлення про те, що він не пройшов процедуру вхідної реєстрації. Після цього ми надаємо йому форму, за допомогою якої він зможе це зробити:

echo "<form method=post action=\" index. php\">";

echo "<table>";

echo "<tr><td>Логін:</td>";

echo "<td><input type=text name=userid></td></tr>";

echo "<tr><td>Пapoль:</td>";

echo "<td><input type=password name=password></td></tr>";

echo "<tr><td colspan=2 align=center>";

echo "<input type=submit value=\"Увійти\"></td></tr>";

echo "</table></form>";

Коли користувач натисне кнопку відправлення (Увійти), сценарій викликається заново й знову все починається з початку. Цього разу в нашому розпорядженні будуть ім'я користувача й пароль, що дозволяють його аутентифікувати (вони зберігаються в Suserid і Spassword). Якщо ці змінні встановлені, переходимо до блоку аутентифікації:

if ($userid && $password)

{

if ($userid=="test" && $password=="test")

{

$valid_user = $userid; session_register ("valid_user");

}

Якщо виконалася відповідність заданим логіну й паролю, у відповідність цій парі ми реєструємо змінну $valid_user, що містить ідентифікатор для конкретного користувача. Таким чином, ми знаємо, хто ввійшов у систему й, відповідно, будемо його відслідковувати.

Оскільки вже відомо, хто зараз відвідує сайт, то повторно надавати йому форму вхідної реєстрації немає необхідності. Замість цього ми повідомляємо користувача, що ми знаємо, хто він такий, і даємо йому можливість виходу із системи:

if (session_is_registered("valid_user"))

{

echo "Ви зареєстровані в системі як. $valid_user. "<br>";

echo "<a href=\"logout.php\">Log out</a> <br>";

Якщо ж при спробі зробити вхідну реєстрацію користувача ми з якоїсь причини зазнаємо невдачі, то в нас є ідентифікатор користувача, але немає змінної $valid_user, і нічого не залишається, крім як видати повідомлення про помилку:

 

if (isset($userid)}

{

// якщо користувач намагався зареєструватися, але

виникла помилка

echo"Неможливо ввійти"; }

Оскільки $valid_userє зареєстрованою змінною сеансу, її не можна перезаписати шляхом передачі іншого значення через URL, наприклад так:

members only. php?valid user=testuser

Розглянемо секретну сторінку.

<?php

session_start();

echo "<h2> Ця сторінка тільки для зареєстрованих коритсувачів</h2>";

// перевірити змінні сеансу

if (session_is_registered("valid_user"))

{ echo "<р> Ви зареєстровані в системі як:$valid_user.</р>";

echo "<р><hз>Це секретна інформація. Вона доступна тільки зареєстрованим користувачам. </h3></p>";

}

else

{ echo "<р>Ви не зареєстровані в системі.</р>";

echo "<р>Сторінка доступна тільки зареєстрованим користувачам. </р>";

}

echo "<a href=\"index.php\">Ha головну сторінку</а>";

?>

</body> </html>

Наведений вище код дуже простий. Усе, що він робить - це запуск сеансу й перевірка того, чи містить поточний сеанс зареєстрованого користувача, з використанням функції session_registered_user(). Якщо користувач пройшов процедуру вхідної реєстрації, ми відображаємо вміст сайту для зареєстрованих користувачів, у протилежному випадку ми повідомляємо його, що в нього немає відповідних повноважень.

Розглянемо сценарій logout.php, що завершує реєстрацію користувача в системі.

<?

session_start ();

$old_user = $valid_user;

// зберегти для перевірки чи реєструвався користувач

$result = session_unregister ("valid_user"); session_destroy ();

?>

<html> <body>

<І>Вихід із системи</h1>

<?

if (!empty ($old_user))

{ if ($result)

{ //якщо користувач був зареєстрований, не залишив систему echo "Ви вийшли із системи. <br>";

}

else

{ // якщо користувач був зареєстрований

// і не може залишити систему

echo "Неможливо вийти. <br>";

}

}

else

{ // якщо користувач не був зареєстрований,

/ / але якось потрапив на цю сторінку

echo "Ви не входили в систему, тому не можете вийти. <br>";

}

?>

<а href="index.php">Ha головну сторінку</а>

</body> </html>

Ми запускаємо сеанс, запам'ятовуємо старе ім'я користувача, скасовуємо реєстрацію змінної $valid_userі завершуємо сеанс. Після цього користувачеві видається одне з наступних повідомлень: він вийшов із системи, не може вийти із системи, оскільки спочатку навіть не зареєструвався.

Наведений вище набір простих сценаріїв є основою для багатьох проектів.

ПОРЯДОК ВИКОНАННЯ РОБОТИ

 

1 Вивчити принципи аутентифікації користувачів в Web- системах.

2 Реалізувати систему аутентифікації за допомогою РНР-сеансів.

КОНТРОЛЬНІ ЗАПИТАННЯ

1 В чому полягає суть атаки на інформацію?

2 Якими категоріями володіє інформація з погляду інформаційної безпеки?

3 Якими категоріями володіє інформаційна система з погляду інформаційної безпеки?

4 Які існують моделі захисту інформації?

5 Основні вимоги до інформаційної безпеки.


ЛАБОРАТОРНА РОБОТА № 3



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 303; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.54.75 (0.011 с.)