password_hash funksiýasy
Aslynda md5 funksiýasy we ony ulanyp
paroly duzlamak köne görnüşli hasaplanýar.
Biz ony, indiki materialy düşünmegiňiz üçin,
şeýle hem ýatdaş işlerinde duşuş bolup bilersiňiz
sebäpli öwrendik.
Duzlan parol almak üçin has kämil usul bar.
Bun üçin password_hash funksiýasy ulanylýar.
Ilkinji parametri hökmünde setir alýar,
ikinjisi bolsa şifrlemek algoritmi (onuň hakda soňra),
we şol setiriň hashini duzy bilen bilelikde gaýtarýar.
Bu kody birnäçe gezek işletmäge synanyşyň:
<?php
echo password_hash('12345', PASSWORD_DEFAULT);
?>
Her gezek dürli netije alarsyňyz we şu netijede setiriň birinji bölegi duz bolar, ikinji bölegi bolsa duzlan parol bolar.
Bizde password_hash funksiýasyndan alnan hash
we bir parol bardyr diýeli. Bu hashiň şu parolyňky
ýa-da däldigini barlamak üçin,
password_verify funksiýasyny ulanyň
- ilkinji parametri hökmünde paroly alýar,
ikinjisi bolsa hashy, we true
ýa-da false gaýtarýar.
Mysal üçin serediň:
<?php
$password = '12345'; // parol
$hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash
if (password_verify($password, $hash)) {
// bu parolyň hashi
} else {
// hash bu parolyňky däl
}
?>
Bu biz amalyýetde näme berýär: biz duzy saklamak üçin maglumatlar bazasynda aýratyn meýdan döretmeli däldiris, şu duzy döretmek bilen ýadawlanmaly däldiris - PHP ýolyňyzy eder!
Şeýlelikde, maglumatlar bazasynda password meýdanynda
biz duzlan paroly onuň duzy bilen bilelikde saklar bolarys.
Şol wagty hash edilen parolyň uzynlygy uly bolar.
Şonuň üçin
maglumatlar bazasynda parol meýdanynyň ölçegini düzetmeli we
ony 60 simwola bellemeli.
Indi registrasiýa kodyny düzeliň. Häzirki bar bolan:
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // duzyň uzynlygy
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // ASCII-table-dan simwol
}
return $salt;
}
$salt = generateSalt(); // duz
$password = md5($salt . $_POST['password']); // paroly duzlan hash-e öwüremeli
?>
password_hash bilen biz muny şuňa gysgaldyarys:
<?php
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
?>
Şuňa meňzeş ýagdaýda awtorizasiýa kody düzeler:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'"; // ulanyjyny logine görä alýarys
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$hash = $user['password']; // maglumatlar bazasyndan duzlan parol
// Bazadan gelen hashiň girizilen parola gabat gelýändigini barlaýarys
if (password_verify($_POST['password'], $hash)) {
// hemmesi gowy, awtorizasiýa...
} else {
// parol gabat gelmedi, habar görkezeris
}
} else {
// şeýle loginli ulanyjy ýok, habar görkezeris
}
?>
Awtorizasiýa we registrasiýaňyzy täze öwrenilen funksiýalara öwüriň.