Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаборатор_практикумZI.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
879.1 Кб
Скачать

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

Після закінчення роботи зі змінною сеансу її реєстрацію можна скасувати, скориставшись функцією 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 і завершуємо сеанс. Після цього користувачеві видається одне з наступних повідомлень: він вийшов із системи, не може вийти із системи, оскільки спочатку навіть не зареєструвався.

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

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

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

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

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

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

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

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

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

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

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

ЗАХИСТ ІНФОРМАЦІЇ ЗА ДОПОМОГОЮ ПАРОЛЯ

Мета: Дослідження методів захисту із застосуванням пароля, а також дослідження методів протидії атакам на пароль.

Тривалість роботи – 2 години

1 ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ