Podstawy PHP i MySQL
Temat 4 - Haszowanie
Ochrona strony za pomocą hasła

Powrót do spisu tematów


W tym rozdziale:

  1. Funkcja md5();
  2. Funkcja trim();
Czym jest haszowanie?

W skrócie jest to zamiana ciągu tekstu na klucz za pomocą algorytmu, który nigdy (przynajmniej w założeniu) nie wygeneruje identycznego klucza dla dwóch różnych ciągów tekstowych. Operacja ta jest jednostronna, to znaczy ciąg tekstowy (np. jakieś słowo) można zamienić na klucz, nie ma jednak sposobu, który pozwoliłby wykonać odwrotną operację, czyli mając klucz nie możemy dojść do tego, z jakiego ciągu tekstowego (słowa) został on wygenerowany.

Gdy przechowujemy hasła użytkowników strony, z powodów bezpieczeñstwa powinniśmy je szyfrować lub haszować. Gdyby baza z hasłami dostała się w niepowołane ręce, nie zostanie wykorzystana, gdyż (w założeniu) nie będzie można dojść do właściwych haseł. 

Funkcja md5();

Najpopularniejszą obecnie funkcją haszującą dostępną w PHP jest md5. Sprawdźmy wynik działania następującego skryptu:

<?php
$tekst="kaczka";
$tekst=md5($tekst);
echo"Wyświetlam wartość zmiennej tekst po działaniu funkcji md5:<br>
$tekst";
?>


Rys. 4_1 - Efekt działania powyższego skryptu

ćwiczenie 4_1 - Skrypt wyświetlający haszowane ciągi tekstowe

  1. Należy umieścić na swoim koncie WWW plik 04_01.php (do pobrania tutaj 04_01.zip).
  2. Należy zwrócić uwagę na fakt, iż w jednym pliku znajduje się formularz oraz skrypt uruchamiający funkcję md5 - w badaniu, która część pliku powinna zostać uruchomiona, została wykorzystana instrukcja warunkowa if oraz ukryte pole formularza (szczegółowe opisy umieszczono w komentarzach).
    Przeanalizowanie i zrozumienie tego mechanizmu jest istotne, gdyż będą go wykorzystywać kolejne udostępniane ćwiczenia.

Bezpieczne hasła

Jak już mówiliśmy nie ma algorytmu odwrotnego do haszowania. Istnieją jednak inne metody łamania (odszyfrowywania) haseł. Jedną z nich jest tzw. metoda słownikowa. Program przechowuje w bazie słowa, które haszuje i porównuje efekt z łamanym kluczem.

ćwiczenie 4_2 - Ochrona hasłem zasobów strony

  1. Należy otworzyć stronę http://md5.rednoize.com
  2. W okno formularza należy skopiować następujący klucz: ec25df4cfcccb37264d7b23c3852647b, następnie należy kliknąć w link "MD5". Jakie słowo zostało znalezione?
  3. Należy powtórzyć krok 2 wpisując klucz: 066516b1e396783c3206115dbbfe8b97
    oraz klucz 783a83a4b01654b4d2c4c0e9735be664
  4. Pierwsze haszowane słowo: "kaczka", drugie "kaczka1", trzecie: "kaczka12".
  5. Należy przeprowadzić doświadczenie na innych haszowanych ciągach tekstu korzystając ze skryptu z ćwiczenia 4_1 i strony http://md5.rednoize.com

Jak widać hasła składające się tylko z prostych słów bardzo łatwo jest złamać, stąd ważne jest chronienie witryny i jej zasobów nie tylko hasłem, ale mocnym hasłem. Mocne hasła to takie, które składają się z ciągu przypadkowych znaków, w których skład wchodzą litery i cyfry.

Ochrona hasłem zasobów witryny

Po teoretycznym wstępie możemy przejść do konkretnego zastosowania. Przygotujemy skrypt, który zanim wyświetli zawartość strony poprosi użytkownika o hasło, porówna je z przechowywanym kluczem (wzorcem) i dopuści lub nie dopuści do zasadniczej treści strony.

Wprawdzie operacjami na ciągach tekstowych zajmiemy się nieco później, warto w tym miejscu wspomnieć o funkcji trim();
Funkcja ta usuwa z podanego w jej parametrze ciągu tekstowego tzw. białe znaki, czyli spacje przed i po znakach. Funkcja jest przydatna przy okazji sprawdzania wszelkich danych wprowadzanych przez użytkownika witryny internetowej.

ćwiczenie 4_3 - Ochrona hasłem zasobów strony

  1. Należy umieścić na swoim koncie WWW plik 04_02.php (do pobrania tutaj 04_02.zip).
  2. Po próbie działania strony należy przeanalizować kod pobranego skryptu.

Zadanie 3 - Prosta witryna rozróżniająca użytkowników po haśle

  1. Należy utworzyć plik ze skryptem o nazwie zadanie03.php i umieścić go na swoim koncie WWW.
  2. Skrypt powinien najpierw pytać o hasło.
  3. Jeżeli użytkownik wpisze nieoczekiwane hasło, skrypt powinien poinformować go odpowiednim komunikatem.
  4. Jeżeli użytkownik wpisze hasło "user1" - skrypt powinien wyświetlić stronę, której tło jest koloru zielonego.
  5. Jeżeli użytkownik wpisze hasło "user2" - skrypt powinien wyświetlić stronę, której tło jest koloru żółtego.
  6. Należy przygotować jeszcze przynajmniej trzy konta (hasła) i przydzielić im różne kolory.
    (Można wykorzystać instrukcję switch omówioną w poprzednim temacie).
  7. Wszystkie hasła powinny być przechowywane w formie haszowanej.
  8. Zadanie powinno być umieszczone w jednym pliku. Należy umieścić linki, które ułatwią nawigację ćwiczeniami (np. powrót do głównej strony ćwiczeñ).

Do zapamiętania

  1. Ze względów bezpieczeñstwa przechowujemy hasła zawsze w formie zaszyfrowanej.
  2. Proste i krótkie hasła łatwo jest złamać.
  3. Przed przeprowadzeniem operacji na ciągach tekstowych pochodzących od użytkownika warto pozbawić je tzw. białych znaków.

 


Powrót do spisu tematów