PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1 2 
Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-25 12:10:11
Kuidas kaitsta funktsioonidega logimist, et keegi läbi ei saaks? Kuidas teha turvaline parooli taastamine läbi andmebaasi?
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-08-25 12:29:27
Turvaliselt parooli taastada ei saagi, saab ainult uue genereerida ja vana üle kirjutada.

Andmebaasi tuleks salvestada vaid parooli räsi ja tänapäeval enam md5, sha1 jms. "vanad head" lahendused ei sobi. Kasutada võiks kas bcrypt, pbkdf2 vms turvalisemat räsifunktsiooni.

Vt.:



Näiteks parooli salvestamine andmebaasi võiks käia nii:


$user = "mingi_kasutaja";
$pass = "mingi_parool";
$parooli_hash = password_hash($pass, PASSWORD_DEFAULT);
salvesta_hash_baasi($user, $parooli_hash);


Ja hiljem parooli kontroll võiks olla selline:


$user = $_POST["user"];
$pass = $_POST["pass"];
$salvestatud_hash = lae_baasist_hash($user);
if(password_hash($pass, PASSWORD_DEFAULT) != $salvestatud_hash){
exit("Vale parool");
}


Kui kasutaja on parooli ära unustanud, siis kontrollid kasutaja isikut (näiteks saadad e-posti aadressile password-reset lingi) ja seejärel kirjutad baasis olemasoleva räsi uue parooli räsiga üle. Räsist taastada midagi kunagi ei saa.
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-08-25 17:22:03
sorry, parooli räsi kontrollimise if lause läks küll täitsa mööda, korrektne oleks kasutada password_verify funktsiooni:


PHP kood:
 
$user 
$_POST["user"];
$pass $_POST["pass"];
$salvestatud_hash lae_baasist_hash($user);
if(!
password_verify($pass$salvestatud_hash)){
    exit(
"Vale parool");
}
RE: Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-25 17:28:48
TSITEERITUD:
sorry, parooli räsi kontrollimise if lause läks küll täitsa mööda, korrektne oleks kasutada password_verify funktsiooni:


PHP kood:
 
$user 
$_POST["user"];
$pass $_POST["pass"];
$salvestatud_hash lae_baasist_hash($user);
if(!
password_verify($pass$salvestatud_hash)){
    exit(
"Vale parool");
}

Kas sinuga saab kuskil ühendust ka võtta, et lähemalt rääkida?
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-08-26 10:12:16
Ei saa kontakti, või õigemini, ma ei tegele tellimustöödega. Üritan siin vaid veidi head krüptohügieeni promoda. Ühesõnaga, kui salvestad kasutajate paroole, siis pea meeles järgmisi punkte:


  • Mitte mingil juhul ära salvesta kasutajate paroole vabatekstina või kuidagi tuletataval kujul. Võib ju mõelda, et kes see ikka just minu väikest saiti häkkida tahab, kuid täna tehakse seda praktiliselt automaatselt, kaitstud pole keegi ja andmebaasile ligipääsuks piisab tihti vaid väikesest SQL injecton turvaaugust, näiteks on kuskil sisend korrektselt escape'imata jäänud. Heaks näiteks on Seemnemaailma leke http://forte.delfi.ee/news/tarkvara/hakkerid-said-endi-kasut
  • Paroolid tuleb salvestada räsina (ühesuunaline konverteerimine kus samast paroolist saab alati sama räsi, aga räsist parooli tagasi teisendada pole võimalik), kuid unustada tuleb vanad juhendid eelmisest kümnendist mis õpetavad kasutama selleks md5() või sha1() funktsioone. Juhul kui ei ole kasutatud soolamist (nn. salt, mis lisatakse algsele väärtusele enne räsi moodustamist), on sellised paroolid sama hästi kui vabatekstina loetavad. md5/sha1 soolamise korral on parooli välja lugeda raskem, aga hea tahtmise korral siiski tehtav, nii et ka seda ei saa turvaliseks lugeda.
  • Isiklikult eelistaksin PBKDF2 räsi, aga siin on üks suur aga. See räsifunktsioon (hash_pbkdf2()) tahab optimaalseima tulemuse jaoks hoolikalt valitud parameetreid, mis võivad tekitada kasutajates segadust ja seega seda on raske soovitada
  • Kokkuvõttes, eelista bcrypt räsi ja eelkõige kuna vastav funktsioon password_hash() ei vaja täiendavaid argumente, kogu soolamine jms. tehakse kõik automaatselt ja eraldi selle pärast muretseda pole vaja (kordan üle - password_hash() funktsiooni puhul ei ole vaja lisada ise soola vms. sest täiendava soola lisamine ei anna siin juhul mitte midagi juurde ja teeb ainult su rakenduse koodi keerukamaks).


Veelkord, parooli räsi genereerimine:


PHP kood:
 
$pass 
"mingiparool";
// "vana" meetod, seda täna enam kasutada ei tohiks
$hash md5($pass);
// "õige" meetod
$hash password_hash($pass", PASSWORD_DEFAULT);
// salvesta $hash väärtus andmebaasi kasutaja parooliväljale


ja parooli räsi kontroll:


PHP kood:
 
$pass 
"mingiparool"// selle saad login vormist
$hash "parooliräsi"// selle laed andmebaasist kasutaja parooli väljalt
// "vana" meetod, seda täna enam kasutada ei tohiks
if ( $hash == md5($pass) ) ...
// "õige" meetod
if ( password_verify($pass$hash) ) ...


Ja lõpetuseks, ka maailma turvalisim räsifunktsioon ei muuda kogu süsteemi automaatselt turvaliseks. Turvalisest räsist on vähe kasu kui kasutaja autenditakse üle ebaturvalise HTTP ühenduse või kui kasutaja parooli kasutatakse brauseri cookide väärtusena või tehakse muid taolisi kummalisi asju. Kui ise HTTPS serti osta ei jaksa või hostingu pakett ei toeta seda vms. siis kasuta https://www.cloudflare.com/ proxyt oma veebiserveri ees, mis tekitab HTTPS sertifikaadi automaatselt ja tasuta.
RE: Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-26 17:14:46
$Sool = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
$Parool = hash('md5', $_POST['Parool'] . $Sool);
for($round = 0; $round < 65536; $round++)
{
$Parool = hash('md5', $Parool . $Sool);
}


Kuidas sellel asendaksite?

Ning sellel, et oleks veidi turvalisem?
{
$kontrollitud_parool = hash('md5', $_POST['Parool'] . $row['Sool']);
for($round = 0; $round < 65536; $round++)
{
$kontrollitud_parool = hash('md5', $kontrollitud_parool . $row['Sool']);
}

if($kontrollitud_parool === $row['Parool'])
{
$login_ok = true;
}
}
RE: Turvamine logimisel ja PW taastamisel
Postitaja: blaa 2015-08-26 22:03:47
TSITEERITUD:
$Sool = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));

sool ei pea üldse nii keeruline olema, piisab paarist sümbolist.

käib vabalt ka selline
$sool = substr(microtime(), 10, 3);
RE: Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-27 02:29:41
Aga mida seal veel asendada, et oleks turvalisem?
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-08-27 09:16:35
Nagu ma juba mainisin, siis kõigepealt tuleks md5 ära unustada, selle asemel tuleks kasutada password_hash funktsiooni.

Esimese bloki kirjutaksin ümber nii (jätsin vanad read kommentaaridena sisse):


PHP kood:
 
// soola pole eraldi vaja kasutada, password_hash teeb seda automaatselt, seda rida pole seega vaja
// $Sool = dechex(mt_rand(0, 2147483647)).dechex(mt_rand(0, 2147483647));

// md5 ei kõlba paroolide räsi jaoks
// $Parool = hash('md5', $_POST['Parool'].$Sool);
// selle asemel kasutame turvalisemat bcrypt räsi
$Parool password_hash($_POST['Parool'], PASSWORD_DEFAULT);

// See konstruktsioon ei anna midagi juurde ja võib ära jätta
// for ($round = 0; $round < 65536; ++$round) {
//    $Parool = hash('md5', $Parool.$Sool);
// }


ja teise bloki nii:


PHP kood:
 
// jälle, sama jutt, md5 tuleb asendada turvalisema bcrypt räsiga
// $kontrollitud_parool = hash('md5', $_POST['Parool'].$row['Sool']);
//for ($round = 0; $round < 65536; ++$round) {
//    $kontrollitud_parool = hash('md5', $kontrollitud_parool.$row['Sool']);
//}
if (password_verify($kontrollitud_parool$row['Parool'])) {
    
$login_ok true;
}


Soola ($Sool) ei ole vaja erladi kasutada, sest selle genereerib password_hash() ise ja lisab selle bcrypt räsile, seega see string mida funktsioon tagastab juba sisaldab soola. Topelt soola lisamine midagi turvalisemaks ei tee. password_verify() omakorda oskab tolle stringi uuesti osadeks jagada (sool, kasutatud algo ja räsi) ja neid parooli vastu võrrelda.
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-08-27 09:19:09
teises blokis ajasin muutujate nimed sassi, $kontrollitud_parool asemel peab olema $_POST['Parool']
RE: Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-27 11:11:31

PHP kood:
 
// jälle, sama jutt, md5 tuleb asendada turvalisema bcrypt räsiga
// $kontrollitud_parool = hash('md5', $_POST['Parool'].$row['Sool']);
//for ($round = 0; $round < 65536; ++$round) {
//    $kontrollitud_parool = hash('md5', $kontrollitud_parool.$row['Sool']);
//}
if (password_verify($kontrollitud_parool$row['Parool'])) {
    
$login_ok true;
}


Asendasin, aga error: Fatal error: Call to undefined function password_verify()
RE: Turvamine logimisel ja PW taastamisel
Postitaja: blaa 2015-08-27 11:14:33
Vabandust, kaaperdan veidi teemat ja kindlasti leiaks soovitusi googeldades.
Aga kui juba on olemas aastaid andmebaas, kus on kasutatud vanu hash algoritme, siis kuidas oleks mõistlik andmebaasis need paroolid ümber genereerida? Ise mõtlen, et tuleks teha üks parooli veerg juurde. Kui inimene sisse logib, siis salvestada uue algoritmiga, uude veergu. Aga sisse logib aasta jooksul võibolla vaid 50% kasutajatest. Kas kõigile saata meil, et ole nüüd hea ja logi sisse ja värskenda andmeid? Nii peaks päris jupp aega tegelema klientide rahustamisega. Ja vanast veerust ikka lahti ei saa, sest paljud on nö surnud kliendid.
Või siis kui aasta on möödas, tuimalt vanad räsid baasist maha, ja kui klient ei saa sisse logida, siis ta peab emaili vahendusel endale uue parooli tekitama. Kui virisema hakkab, siis saab öelda, et võibolla oled aastaga vana parooli unustanud või et turvakaalutlustel kustutasime ära, mis tegelikult ei ole vale.


Teine küsimus või kahtlus on mul password_hashi kohta, väljaarvutatud hashis ju peitub kogu sool ja saladus. Kui pahalane saab ainult andmebaasile ligi, siis sõnaraamatuga proovimise teel on ikkagi võimalik mõni kasutaja lahti muukida. Võibolla on mõistlik kaasata veel mingi andmebaasiväline tegur, näiteks rakenduse parool, mis on hardcodetud php koodi. Näiteks:
$parool_php_koodis = 'verysecret123';

$hash = password_hash($pass.$parool_php_koodis, PASSWORD_DEFAULT);

ja

if ( password_verify($pass.$parool_php_koodis, $row['hash']) )
RE: Turvamine logimisel ja PW taastamisel
Postitaja: geo__ 2015-08-27 12:01:28
TSITEERITUD:
Vabandust, kaaperdan veidi teemat ja kindlasti leiaks soovitusi googeldades.
Aga kui juba on olemas aastaid andmebaas, kus on kasutatud vanu hash algoritme, siis kuidas oleks mõistlik andmebaasis need paroolid ümber genereerida? Ise mõtlen, et tuleks teha üks parooli veerg juurde. Kui inimene sisse logib, siis salvestada uue algoritmiga, uude veergu. ..


Kasutajatele kõige valutum oleks, kui süsteem tuvastaks automaatselt, näiteks:
Kui uus parooli väli on tühi idenfitseeritakse vana järgi
else {idenfitseeritakse uue järgi}
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-08-27 12:15:07
TSITEERITUD:
Asendasin, aga error: Fatal error: Call to undefined function password_verify()


See tähendab, et tuleks PHP versiooni uuendada vähemalt versioonini 5.5. Uuendamine on hea mõte juba selle pärast, et septembrist on php 5.5 kõige madalam aktiivselt toetatud php versioon üldse, kõik vanemad on deprecated.

TSITEERITUD:
Aga kui juba on olemas aastaid andmebaas, kus on kasutatud vanu hash algoritme, siis kuidas oleks mõistlik andmebaasis need paroolid ümber genereerida?


Täpselt niimoodi saabki nagu kirjeldasid. Ainult et lisavälja pole vaja &#8211; sellega, et mis tüüpi räsiga on tegu, saad aimu räsi kuju vaadates. Näiteks kui salvestatud on "puhas" md5 hex kujul, siis on salvestatud räsi pikkus 32 baiti.

Võrdluseks WordPress töötab nii, et kui parooli väljal on 32 baidi pikkune string, siis kasutatakse räsifunktsioonina md5 (ühildumaks eriti vanade WordPressi versioonidega) ja kui parool klapib, koostatakse samast paroolist juba uue formaadiga räsi ja salvestatakse see andmebaasi. Järgmine kord sisse logides on md5 asemel juba uuem ja turvalisem räsi. Seda saab ka lihtsalt proovida, tee oma paroolist ise md5 hex string ja salvesta see WordPressi andmebaasis oma kasutaja parooliväljale. Nüüd proovi WordPressi sisse logida ja siis mine vaata uuesti oma kasutaja rida andmebaasis, enam ei tohiks seal md5 väärtust olla.

TSITEERITUD:
Teine küsimus või kahtlus on mul password_hashi kohta, väljaarvutatud hashis ju peitub kogu sool ja saladus


See mida kirjeldad, nimetatakse "pipardamiseks" (peppering). Kui sool kaitseb rainbow table rünnaku vastu, siis pipar on jah dictionary kuid selle vastu on palju paremaks rohuks piisvaalt keerulised paroolid (heade paroolide saamiseks on hea meetod liiga tavaliste paroolide keelamine http://github.com/northox/stupid-password ). Seega pipardamist võib küll kasutada, aga üldiselt leitakse, et see turvalisust ei suurenda kuna lisaks ei leki tavaliselt ju ainult andmebaas &#8211; andmebaas lekib reeglina tänu veale programmikoodis ja sama teed pidi saab kätte ka kasutatud "pipra". Oma südamerahu huvides võib seda kasutada, aga praktilist väärtust väga ei ole. bcrypt läbi password_hash funktsiooni on tänapäeval täiesti piisav ja mingeid lisakonstruktsioone sinna juurde vaja ei ole.
RE: Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-27 12:39:08
TSITEERITUD:


See tähendab, et tuleks PHP versiooni uuendada vähemalt versioonini 5.5. Uuendamine on hea mõte juba selle pärast, et septembrist on php 5.5 kõige madalam aktiivselt toetatud php versioon üldse, kõik vanemad on deprecated.


Pean siis majutajaga ühendust võtma, kuna max mis valida saan on 5.4.12.
RE: Turvamine logimisel ja PW taastamisel
Postitaja: blaa 2015-08-27 15:10:57
Ma vist jään pipardamise juurde. Andmebaas ja kood erinevas serveris. Üks ehk häkib baasi või dumpi ära ja teine häkib koodiserveri ära, aga mõlemaid servereid korraga on vähem tõenäoline.
Kui imekombel ka peaks õnnestuma baasi kirjutamine (injectioniga), siis võib ju juba eelnevalt endale ühe parooli hashida ja mõne adminni parooli üle lasta ja siis toimetada süsteemis täitsa vabalt.
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-08-27 16:05:40
Tavaliselt käib rakendusserveri ja andmebaasiserveri häkkimine paaris. Kõigepealt häkitakse rakenduse server (näiteks laetakse php fail avalikult ligipääsetavasse cache folderisse a la TimThumb), seejärel otsitakse üles rakenduse config.php fail (või mis iganes parasjagu konfifaili nimi satub olema), võetakse sealt andmebaasi kasutajatunnused ja sellesama rakendusserveri kaudu logitakse andmebaasi sisse (andmebaasi tulemüür lubab ligipääsu rakendusserverist). Selleks momendiks on pipra väärtus juba ammu käes.

Kõige lihtsama SQL injectoni abil saab tõesti kohe baasile ligi, aga sealt edasi hakkab toimuma õiguste eskaleerimine. Tehakse end SQL injectoni abil adminniks, seejärelt laetakse rakenduse admin liidese kaudu üles php fail järgmise sisuga:


PHP kood:
 
<?php
eval($_POST['inject_script']);


ja edasi ongi pwn
RE: Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-28 09:08:39
http://pastebin.com/xddWCJmx

Kas selline on okei? Mida veel muuta?
RE: Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-28 09:09:51
TSITEERITUD:
http://pastebin.com/xddWCJmx

Kas selline on okei? Mida veel muuta?


Veel unus sealt eemaldamata //unset($row['Sool']);
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-08-28 12:03:52
Vist on näpukas, $kontrollitud_parool asemel peaks olema ikka $_POST['Parool'], aga muidu OK
RE: Turvamine logimisel ja PW taastamisel
Postitaja: T 2015-08-28 13:01:12
Konto teeb ilusti ära, parooli salvestab $2y$10$KDfpLWnk6r1Li/rANX11kOFGe
kuid uus kood ei suuda tuvastada millegi pärast, kohe, et vale kasutajanimi või parool.
RE: Turvamine logimisel ja PW taastamisel
Postitaja: palun seletust 2015-08-31 12:16:08
Palun seletage nüüd mulle ka ära. Näiteks

$Parool = password_hash('test', PASSWORD_DEFAULT);

Annab mulle hashi, mille salvestan baasi...kõikskõik mis ajahetkel ma parooliga 'test' hashi teen, peab see ju olema sama, et võrrelda. Küsimus - kas hash siis sõltub arvutist? Kui jah. siis on ju jama - ei saa serverit välja vahetada ilma, et paroolid tuksi ei lendaks...kui aga hash ei sõltu ei arvutist ega ajast, siis saab ju samamoodi genereerida kõikvõimalike sõnade hashid nagu on tehtud md5 puhul ja seeläbi algse parooli teada...
RE: Turvamine logimisel ja PW taastamisel
Postitaja: f 2015-08-31 15:53:54
Lihtne funktsioon enda klassist. Lisa logout funktsioon sisse ja kontroll funktsioon ka sisse ja on tehtud. __constructi lisa andmebaas sisse ja session_start();
<php>
public function login() {

$sth = $this->db->prepare('select id,username,password from user');
$sth->execute();

foreach($sth as $q) {

$uName = $q['username'];
$pWord = $q['password'];
}
$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';

$hash = password_hash($pWord, PASSWORD_BCRYPT);

if ($uName == $username and password_verify($pWord, $hash)) {
$_SESSION['login']['username']=$uName;
header("location:?p=index");
exit();
}

}
</php>
RE: Turvamine logimisel ja PW taastamisel
Postitaja: andris 2015-09-01 10:09:14
TSITEERITUD:
Palun seletage nüüd mulle ka ära. Näiteks

$Parool = password_hash('test', PASSWORD_DEFAULT);

Annab mulle hashi, mille salvestan baasi...kõikskõik mis ajahetkel ma parooliga 'test' hashi teen, peab see ju olema sama, et võrrelda. Küsimus - kas hash siis sõltub arvutist? Kui jah. siis on ju jama - ei saa serverit välja vahetada ilma, et paroolid tuksi ei lendaks...kui aga hash ei sõltu ei arvutist ega ajast, siis saab ju samamoodi genereerida kõikvõimalike sõnade hashid nagu on tehtud md5 puhul ja seeläbi algse parooli teada...


Ei ole päris sama kuna selline räsi sisaldab muu hulgas ka automaatselt genereeritud soola, mis on iga kord erinev, lisaks võib aja jooksul muutuda PASSWORD_DEFAULT väärtus jne. ja sellepärast tulebki kasutada just password_verify() funktsiooni, mitte proovida tavalist == operaatorit.

Selle jaoks, et saada sama tulemus, tuleb kasutada ka täpselt samu argumente, kuid vaikimisi neid käppida ei tasu, sest PHP on valinud täiesti mõistlikud algväärtused.

Järgmine konstruktsioon annab password_hash() funktsiooni puhul alati sama tulemuse:


PHP kood:
 
echo password_hash("abc"PASSWORD_BCRYPT, [
    
"cost" => 10,
    
"salt" => "1234567890123456789012"
])."\n";
// $2y$10$123456789012345678901uJdcB589bzl9apYHn74KE0MAE79xNSNW
// $algo$cost$salt+hash


Kui sa aga ei tea, et milline on kõige mõistlikum krüptoalgoritm, cost argument ning kuidas genereerida krütpograafiliselt turvalist salt väärtust, siis ei ole mingit mõtet neid ise puutuda. password_veirfy() saab räsi formaadi järgi aru, et kuidas see räsi on konstrueeritud ja seega on password_hash() ka tulevikukindel, saad jätta kõik argumendid vaikimisi väärtusteks ja PHP versioon ise valib räsi esialgsel genereerimisel, et mis on hetke standardite järgi kõige mõistlikumad väärtused. Täna on kõige parem algo bcrypt, homme võibolla midagi muud, aga koodi selle jaoks muuta pole enam vaja.
RE: Turvamine logimisel ja PW taastamisel
Postitaja: blaa 2015-09-01 10:10:51
TSITEERITUD:
Palun seletage nüüd mulle ka ära. Näiteks

$Parool = password_hash('test', PASSWORD_DEFAULT);

Annab mulle hashi, mille salvestan baasi...kõikskõik mis ajahetkel ma parooliga 'test' hashi teen, peab see ju olema sama, et võrrelda. Küsimus - kas hash siis sõltub arvutist? Kui jah. siis on ju jama - ei saa serverit välja vahetada ilma, et paroolid tuksi ei lendaks...kui aga hash ei sõltu ei arvutist ega ajast, siis saab ju samamoodi genereerida kõikvõimalike sõnade hashid nagu on tehtud md5 puhul ja seeläbi algse parooli teada...

Paroolid ei lenda tuksi. See ongi soolamise mõte, et samast paroolist erineval hetkel hashi tehes tuleks see ikkagi erinev. Kindlasti leiab veebist andmebaase, mis sisaldavad väljaarvutatud md5 hashe ja millest nad genereeritud on. Kuna kaks erinevat parooli võivad anda sama hashi, siis saab isegi mitme parooliga sisse logida. Kui aga hashid on soolatud, siis sellise paroolide/hashide andmebaasi kasutamisel pole mõtet.
password_hash-i räsi peidab endas ka soola ning verify oskab selle välja lugeda, ning kombinatsioonis kasutaja sisestatud parooliga proovib, kas räsi tuleb õige.
Toon näite md5 baasil.

$sool = rand(1000,9999);
$hash_soolaga = md5('paRool'.$sool).$sool;
$hash_soolaga paned baasi.

//kontroll
$hash = substr($row['hash_soolaga'], 0, -4);//row tuleb baasist, eemaldame soola
$sool = substr($row['hash_soolaga'], -4); //võtame ainult soola

if (md5('paRool'.$sool) === $row['hash_soolaga'])
{
korras
}





Leheküljed: 1 2 

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0927600860596