Kihagyás

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
<?php
  $jelszo = "Macska123";
  $hashelt_jelszo = password_hash($jelszo, PASSWORD_DEFAULT);
  echo $hashelt_jelszo . "<br/>";   // ennek a kiíratásnak a kimenete változó!

  var_dump(password_verify("Macska123", $hashelt_jelszo)); echo "<br/>";
  var_dump(password_verify("Macska", $hashelt_jelszo)); echo "<br/>";
?>

A kód kimenete

$2y$10$/pbKsI/sPO.LhMF5yObr4eo0hHaK67KTK3x1VtEhAT9sAGu8jmomC bool(true) bool(false)


Utolsó frissítés: 2024-02-10 17:38:17