8.2. fejezet¶
A fejezet anyaga¶
Jelszavak hashelése¶
Az általunk készített webes projektekben fontos figyelnünk a felhasználó bizalmas adatainak (pl. jelszavak, banki adatok) biztonságos tárolására.
Fontos, hogy a felhasználók jelszavait NEM SZABAD egyszerű szövegként (plain text-ként) eltárolnunk, hiszen amennyiben a felhasználói adatokat tároló állomány/adatbázis illetéktelen személyek kezébe kerül, akkor egyszerűen kiolvasható lesz a "támadó" számára az egyes felhasználók jelszava.
A célunk a jelszavak titkosított módon történő eltárolása, amit a gyakorlati életben úgynevezett hasheléssel valósítunk meg. A hashelés lényege, hogy valamilyen összetett matematikai algoritmus használatával átalakítjuk a jelszavunkat egy hashelt szöveggé. Egy kellően jó hashelő algoritmus esetén gyakorlatilag lehetetlen az így kapott hashelt jelszó ismeretében visszafejteni az eredeti jelszót. Emiatt a jelszavakat mindig hashelve tároljuk el!
Megjegyzés
Ezen a kurzuson nem tárgyaljuk részletesen a hashelés folyamatát és az ide tartozó algoritmusokat. Ezekről az Információbiztonság, illetve Algoritmusok és Adatszerkezetek I kurzusokon tanulhatnak az érdeklődők.
Hashelés PHP-ban¶
Jelszavak hashelésére PHP-ban a password_hash()
függvényt használjuk. Ennek első paramétereként megadjuk a jelszót, második paramétereként pedig a hashelést végző algoritmust (utóbbi esetén a PASSWORD_DEFAULT
értéket használjuk, ami egyébként kellően megbízható). A függvény a hashelt jelszóval tér vissza.
Miután a regisztrációt követően eltároljuk a hashelt jelszót, később a bejelentkezésnél meg kell néznünk, hogy a felhasználó által megadott jelszó egyezik-e az eltárolt, hashelt jelszóval. Ezt a password_verify()
függvénnyel tehetjük meg, amely első paraméterben a felhasználó által megadott jelszót várja, második paraméterben pedig az eltárolt hash-t. A függvény visszaadja, hogy a két jelszó hash alapján egyezik-e.
Példa: Jelszó hashelése, hashek összehasonlítása
1 2 3 4 5 6 7 8 |
|
A kód kimenete
$2y$10$/pbKsI/sPO.LhMF5yObr4eo0hHaK67KTK3x1VtEhAT9sAGu8jmomC bool(true) bool(false)