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:

html<?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:

html<?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:

html<?php
  $login = $_POST['login'];
  $password = md5($_POST['password']); // převedeme heslo na jeho hash
    
  $query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Задание 1

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.

Задание 2

Proveďte změny v autorizaci s ohledem na hashování, zkuste se přihlásit pod dříve registrovanými uživateli.