40138 skanuj0223 (3)

40138 skanuj0223 (3)



236 PHP i MySQL dla każdego

Uwierzytelnianie z wykorzystaniem mechanizmu sesji

W rozdziale 7. został przedstawiony skrypt, który umożliwiał wyposażenie witryny internetowej w prosty mechanizm logowania. Dane dotyczące nazw oraz haseł użytkowników były zapisywane w pliku tekstowym, a skrypt porównywał je z danymi wprowadzonymi do formularza logowania. Jeśli występowała zgodność, była wczytywana właściwa wersja strony zapisana w oddzielnym pliku HTML; jeśli zaś zgodności nie było, wczytywany był jeden z plików HTML z opisem błędu.

Podstawową wadą takiej realizacji uwierzytelniania jest to, że po pierwotnej weryfikacji danych dostęp do dalszej części witryny jest już nieograniczony. Jeśli osoba postronna poznałaby strukturę plików składających się na witrynę (a wystarczy dowiedzieć się, jaką nazwę ma główny plik strony, do którego dostęp uzyskiwany jest z poziomu skryptu login.php), uzyskałaby pełny dostęp bez konieczności podawania hasła. Skoro bowiem skrypt logowania znajdował się pod adresem http://localhoslZlogin.php, a strona główna pod adresem http://localhost/indexl.html, to wystarczyło wpisanie tego drugiego adresu do przeglądarki, aby ominąć cały mechanizm logowania.

Jeśli jednak wykorzystamy poznaną w tym rozdziale wiedzę dotyczącą mechanizmów sesji, możemy stworzyć o wiele bezpieczniejszy mechanizm logowania, którego nie da się tak łatwo ominąć. Musimy jednak liczyć się z tym, że kod witryny będzie znacznie bardziej rozbudowany. Do przechowywania oraz weryfikacji nazw i haseł użytkowników użyjemy mechanizmu poznanego podczas pracy nad przykładem z rozdziału 7. Wszystkie dane będą przechowywane w pliku tekstowym o nazwie passwords.txt (w rozdziale 10. poznamy techniki umożliwiające przechowywanie haseł w bazie danych). Identycznie działać będzie również funkcja checkPass dokonująca ich weryfikacji.

Witryna będzie się składała z czterech części:

1.    skryptu login.php realizującego procedurę logowania (listing 8.8),

2.    pliku form.php zawierającego kod formularza logowania (listing 8.9),

3.    pliku main.php zawierającego główną część witryny, dostępną jedynie dla załogowanych użytkowników (listing 8.10),

4.    skryptu logout.php zawierającego procedurę wylogowania (listing 8.11).

Listing 8.8. Treść skryptu login.php zawierającego główną procedurę logowania

<?php

function checkPass($user, Spass)

<

if(!$fd = @fopen("passwords.txt", "r")) return 1:

Sresult - 2: while (Ifeof ($fd)){

$line = trim<fgets($fd)):

$arr = explode(":”. Sline): if(count($arr) < 2) continue:

if($arr[0] !■ $user) continue:


Wyszukiwarka

Podobne podstrony:
skanuj0284 (3) 298 PHP i MySQL dla każdego Wynik działania takiego zapytania został przedstawiony na
skanuj0163 (9) 174 PHP i MySQL dla każdego Listing 6.12. Wykorzystanie funkcji strtok <?php $str
skanuj0151 (9) 162 PHP i MySQL dla każdego Listing 6.5. Wykorzystanie funkcji zmieniających wielkość
30484 skanuj0460 (2) 478 PHP i MySQL dla każdego Do nawiązania połączenia jest wykorzystywana funkcj
15605 skanuj0163 (9) 174 PHP i MySQL dla każdego Listing 6.12. Wykorzystanie funkcji strtok <?php
67853 skanuj0176 (8) 188 PHP i MySQL dla każdego Listing 7.2. Sposób wykorzystania funkcji

więcej podobnych podstron