PHP titkosítás, avagy hogyan védjük a felhasználók adatait (password_hash() és password_verify() PHP függvények)

Ha olyan PHP oldalt készítünk, amelyen keresztül érzékeny adatokat kezelünk (például jelszavak), akkor minden esetben fontos kiemelt figyelmet szentelnünk az adatok védelmére. Az adatok védelmének egyik legfontosabb lépése az adatok titkosítása.

A PHP leckékhez készített kép, mely bemutatja, hogy weboldalunkon ingyenesen tanulható a PHP nyelv

PHP titkosítás, avagy hogyan védjük a felhasználók adatait

Ha olyan PHP oldalt készítünk, amelyen keresztül érzékeny adatokat kezelünk (például jelszavak), akkor minden esetben fontos kiemelt figyelmet szentelnünk az adatok védelmére. Az adatok védelmének egyik legfontosabb lépése az adatok titkosítása, erről lesz szó ebben a leckében.

Mi az a titkosítás?

Valószínűleg sokaknak egyértelmű, hiszen eléggé beszédes az elnevezése is, de érdemes pár szót szólni róla. A titkosítás egy olyan eljárás, amely során az információt egy algoritmus segítségével olyan szöveggé alakítjuk, amely egy ember számára (sőt gépek számára is) értelmezhetetlen, ha nem rendelkezik a megfejtéshez szükséges kulccsal.

Mivel titkosítsunk PHP-ban?

MD5-tel és SHA-val vágnák rá sokan. Bár nagyon sokáig valóban ez volt a két legjobban elterjedt titkosító algoritmus, de manapság már nem ajánlott a használatuk. De nem kell aggódni, szerencsére a PHP kínál számunkra egy megfelelően biztonságos hash függvényt a titkosításra. Ez pedig nem más, mint a „password_hash()„.

Ez a függvény azért nagyon biztonságos, mert egy nagyon erős hasítóalgoritmust (hash) használ, illetve a random salt módszernek hála megelőzhető a szivárványtábla és a szótár alapú támadás.

password_hash() használata

A password_hash() függvény egy biztonságos hash értéket generál a titkosítani kívánt jelszavakból.

Szintaxis

password_hash(JELSZÓ, ALGORITMUS);

Először meg kell adnunk a jelszót, amit titkosítani szeretnénk, majd az algoritmust, hogy melyikkel szeretnénk biztonságosabbá tenni a jelszavunkat.

Az alábbi titkosító algoritmusokat választhatjuk:

  • PASSWORD_DEFAULT
  • PASSWORD_BCRYPT
  • PASSWORD_ARGON2I
  • PASSWORD_ARGON2ID


A legtöbb esetben érdemes a „PASSWORD_DEFAULT” algoritmust használni, hiszen ez lehetővé teszi, hogy ha a jövőben bekerül a PHP nyelvbe egy újabb és biztonságosabb algoritmus, akkor a programunk automatikusan azt használja majd.

Példa jelszó titkosításra PHP-ban

PHP kód

<?php
   $jelszo = "NemErősJelszó123";
   $titkositott_jelszo = password_hash($jelszo, PASSWORD_DEFAULT);
   echo $titkositott_jelszo;
?>
Code language: HTML, XML (xml)

Eredmény

$2y$10$DcMxWW0YhxatvZP6EWILf.eziSVzKtqyCjdBiacGwa8e0cLC4ibtu


Láthatjuk, hogy a fenti jelszóból („NemErősJelszó123”) egy sokkal biztonságosabb kód („$2y$10$DcMxWW0YhxatvZP6EWILf.eziSVzKtqyCjdBiacGwa8e0cLC4ibtu”) keletkezett.

password_verify() használata

Az addig okés, hogy most már van egy szupertitkos és biztonságos jelszavunk, amit nyugodtan tárolhatunk egy adatbázisban is, de mi van, akkor ha szeretnénk az oldalunkon egy bejelentkeztetést megvalósítani? Hogy fogjuk tudni leellenőrizni, hogy a felhasználó által beírt jelszó megegyezik-e az adatbázisban tárolttal? Hiszen a felhasználó nyilván nem a titkosított jelszót fogja beírni a belépéskor, így egy szimpla ellenőrzést nem tudunk végrehajtani, de semmi gond, ilyen esetekre találták ki a password_verify() függvényt.

A password_verify() függvény arra képes, hogy megállapítsa, hogy a felhasználó által megadott jelszó és az adatbázisban tárolt titkosított jelszó megegyezik-e. Ha igaz értékkel tér vissza, akkor a két jelszó egyezik, ha hamissal, akkor pedig nem.

Szintaktika

password_verify(MEGADOTT.JELSZÓ, TITKOSÍTOTT.JELSZÓ);
Code language: CSS (css)

A „password_verify” függvénynek első paraméterként megadjuk a felhasználó által megadott jelszót, majd második paraméterként az adatbázisban tárolt titkosított jelszót.

Példa password_verify() használatára

PHP kód

<?php
   $jelszo = "NemErősJelszó123";
   $titkositott_jelszo = '$2y$10$DcMxWW0YhxatvZP6EWILf.eziSVzKtqyCjdBiacGwa8e0cLC4ibtu';
   if(password_verify($jelszo, $titkositott_jelszo)) echo "A két jelszó megegyezik.";
?>
Code language: HTML, XML (xml)

Eredmény

A két jelszó megegyezik.


Mivel a megadott jelszó és a jelszóból generált hash megegyezik, így a password_verify() függvény igaz értékkel tér vissza.

Ha hasznos volt számodra, akkor kérlek oszd meg másokkal is, hogy ezzel támogass minket!