Хеширане на парола в PHP

Да се съхранява парола в чист вид е неправилно. Хакер-злоумишленик може да получи достъп до вашата база данни и да открадне паролите.

Затова обикновено логинът се съхранява в чист вид, а паролата се хешира със специална функция md5, която приема паролата като параметър и връща нейния хеш, от който не може да се възстанови самата парола.

Нека, например, намерим хеша на някакъв низ:

html<?php
  echo md5('12345'); // ще изведе '827ccb0eea8a706c4c34a16891f84e7b'
?>

Сега трябва да преработим нашата регистрация и нашата авторизация. Първо бих препоръчал да изчистите таблицата с потребители, тъй като там в момента се съхраняват пароли в чист вид, а трябва да се съхраняват техните хешове. След това при тестване на регистрацията таблицата ще се попълни с данни в новия формат.

Нека сега поправим нашата регистрация така, че при запазване на нов потребител в базата да се добавя не паролата, а нейният хеш.

Описаната корекция ще представлява нещо такова:

html<?php
  $login = $_POST['login'];
  $password = md5($_POST['password']); // преобразуваме паролата в нейния хеш
  
  $query = "INSERT INTO users SET login='$login', password='$password'";
?>

Нека внесем аналогични корекции в авторизацията:

html<?php
  $login = $_POST['login'];
  $password = md5($_POST['password']); // преобразуваме паролата в нейния хеш
    
  $query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Задание 1

Внесете промени в регистрацията, като вземете предвид хеширането, регистрирайте няколко нови потребителя, уверете се, че те са добавени в базата данни с хеширани пароли.

Задание 2

Внесете промени в авторизацията, като вземете предвид хеширането, опитайте се да се авторизирате с регистрираните по-рано потребители.