⊗ppPmAuHFP 426 of 447 menu

Funkcija password_hash

Iš tiesų funkcija md5 ir slaptažodžio "druskos" pritaikymas su ja laikomi pasenusiais. Mes ją tyrėme, kad jūs suprastumėte tolesnę medžiagą, taip pat dėl to, kad su tuo galite susidurti dirbdami su svetimais projektais.

Yra tobulesnis būdas gauti "pradruskintą" slaptažodį. Tam naudojama funkcija password_hash. Pirmuoju parametru ji priima eilutę, o antruoju - šifravimo algoritmą (apie jį vėliau), ir grąžina šios eilutės maišą kartu su "druska".

Pabandykite kelis kartus paleisti šį kodą:

<?php echo password_hash('12345', PASSWORD_DEFAULT); ?>

Kaskart gausite skirtingą rezultatą ir šiame rezultate pirmoji eilutės dalis bus "druska", o antroji dalis - "pradruskintas" slaptažodis.

Tarkime, mes turime maišą, gautą iš funkcijos password_hash ir kažkokį slaptažodį. Kad patikrintumėte, ar tai šio slaptažodžio maišas, ar ne, reikia naudoti funkciją password_verify - pirmuoju parametru ji priima slaptažodį, o antruoju - maišą, ir grąžina true arba false.

Pažiūrėkime pavyzdžiu:

<?php $password = '12345'; // slaptažodis $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // maišas if (password_verify($password, $hash)) { // maišas iš šio slaptažodžio } else { // maišas ne iš šio slaptažodžio } ?>

Ką tai mums duoda praktiškai: mes galime nekurti duomenų bazėje atskiro lauko "druskos" saugojimui, nesivarginti su šios "druskos" generavimu - PHP viską padarys už mus!

Tai reiškia, kad duomenų bazėje lauke password mes saugosime "pradruskintą" slaptažodį kartu su jo "druska". Tuo tarpu maišytas slaptažodis turės didesnį ilgį. Todėl duomenų bazėje mums reikia pataisyti dydį slaptažodžio lauko ir nustatyti jį į 60 simbolių.

Dabar pataisykime registracijos kodą. Štai kas yra dabar:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // "druskos" ilgis for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // simbolis iš ASCII lentelės } return $salt; } $salt = generateSalt(); // "druska" $password = md5($salt . $_POST['password']); // paverčiame slaptažodį į "pradruskintą" maišą ?>

Naudodami password_hash mes tai sutrumpiname iki:

<?php $password = password_hash($_POST['password'], PASSWORD_DEFAULT); ?>

Analogiskai pataisomas ir autorizacijos kodas:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // gauname vartotoją pagal prisijungimo vardą $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // "pradruskintas" slaptažodis iš DB // Tikriname maišo iš duomenų bazės atitikimą įvestam slaptažodžiui if (password_verify($_POST['password'], $hash)) { // viskas gerai, autorizuojame... } else { // slaptažodis netiko, išvesime pranešimą } } else { // vartotojo su tokiu prisijungimo vardu nėra, išvesime pranešimą } ?>

Perdarykite savo autorizaciją ir registraciją naudodami naujai išmoktas funkcijas.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti