Hashování hesel v PHP
Ukládat heslo v otevřené podobě je nesprávné. Hacker-zlomyslník může získat přístup k vaší databázi a odcizit hesla.
Proto se login obvykle ukládá v otevřené
podobě a heslo je hashováno speciální funkcí
md5, která parametrem přijímá
heslo a vrací jeho hash, podle kterého
nelze obnovit toto samotné heslo.
Pojďme například najít hash nějakého řetězce:
<?php
echo md5('12345'); // vypíše '827ccb0eea8a706c4c34a16891f84e7b'
?>
Nyní musíme předělat naši registraci a naši autorizaci. Pro začátek bych doporučoval vyčistit tabulku s uživateli, protože tam nyní jsou uložena hesla v otevřené podobě, ale měla by být uložena jejich hashe. Poté se při testování registrace tabulka naplní daty v novém formátu.
Pojďme nyní upravit naši registraci tak, aby při uložení nového uživatele do databáze bylo přidáno ne heslo, ale jeho hash.
Popsaná oprava bude představovat něco takového:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // převedeme heslo na jeho hash
$query = "INSERT INTO users SET login='$login', password='$password'";
?>
Proveďme podobné úpravy v autorizaci:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // převedeme heslo na jeho hash
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Proveďte změny v registraci s ohledem na hashování, zaregistrujte několik nových uživatelů, ujistěte se, že do databáze byli přidáni s hashovanými hesly.
Proveďte změny v autorizaci s ohledem na hashování, zkuste se přihlásit pod dříve registrovanými uživateli.