Hashovanie hesla v PHP
Ukladať heslo v otvorenej forme - je nesprávne. Hacker-zlomyseľník môže získať prístup k vašej databáze a ukradnúť heslá.
Preto sa zvyčajne login ukladá v otvorenej
forme, a heslo sa hashuje špeciálnou funkciou
md5, ktorá ako parameter prijíma
heslo, a vracia jeho hash, podľa ktorého
nie je možné obnoviť toto samotné heslo.
Nájdime napríklad hash nejakého reťazca:
<?php
echo md5('12345'); // vypíše '827ccb0eea8a706c4c34a16891f84e7b'
?>
Teraz je potrebné, aby sme upravili našu registráciu a našu autorizáciu. Na začiatok by som odporúčal vyčistiť tabuľku s používateľmi, pretože tam momentálne sú uložené heslá v otvorenej forme, a mali by byť uložené ich hashe. Potom pri testovaní registrácie sa tabuľka naplní údajmi v novom formáte.
Upravme teraz našu registráciu tak, aby pri ukladaní nového používateľa do databázy sa pridalo nie heslo, ale jeho hash.
Opísaná úprava bude vyzerať asi nejak takto:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // pretransformujeme heslo na jeho hash
$query = "INSERT INTO users SET login='$login', password='$password'";
?>
Vykonajme podobné úpravy v autorizácii:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // pretransformujeme heslo na jeho hash
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Vykonajte zmeny v registrácii s ohľadom na hashovanie, zaregistrujte niekoľko nových používateľov, presvedčte sa, že do databázy sa pridali s hashovanými heslami.
Vykonajte zmeny v autorizácii s ohľadom na hashovanie, skúste sa autorizovať pod predtým zaregistrovanými používateľmi.