anonīms Posted October 14, 2009 Author Report Share Posted October 14, 2009 tad reāli sanāk, ja man jāpārveido savu patreizējo paroles veidošanas funkciju un tas tad arī viss būs "ok"? http://paste.php.lv/11f79af9d0bff1b6261aaad9fcfb4f0c?lang=php <- patreizējā f-ja. Un jā - kā tad jauno pw uzstādīt lietotājiem, kas jau ir reģistrēti, bet kuriem vēl nav salts? Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 Nē, paroles veidošanas funkcija (kaut arī to es pārveidotu) šoreiz nav galvenais. Galvenais ir tas, ka cookijā vienmēr tiek ierakstīta fiksēta vērtība - un tas ir slikti. Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 14, 2009 Author Report Share Posted October 14, 2009 tad man ir nepieciešams lietot checktoken un maketoken funkcijas? Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 Nu, mana pamatideja to visu taisot bija tieši tāda. Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 14, 2009 Author Report Share Posted October 14, 2009 (edited) Un ko man iesākt tagad? function check_submitted_pw($username,$password,$autorenew){ global $remember; $authenticated = false; $uid=get_uid($username); //echo "|$uid|"; if('' != $uid){ $salt=get_salt($uid); //echo "|$salt|"; if('' != $salt){ $salt=pack('H*',$salt); $parole = make_password($salt,$password); $parbaudama_parole = hash('sha512',$parole . $salt,false); if(check_pw($uid,$parbaudama_parole)){ $authenticated = maketoken($uid,$parole,$autorenew,mktime()+$remember,'');//izveidojam vērtību, kas derīga $remember sekundes } else { //echo "necheck pw"; } } else { //echo "ne salt"; } } else { //echo "ne uid"; } return $authenticated; } precīzāk jau tieši paroles pārbaude (jo man pw tika savadāk ģenerēta un tagad šķiet, ka sanāk, ka visas pw, kas ir db varētu būt nederīgas). $parole = make_password($salt,$password); $parbaudama_parole = hash('sha512',$parole . $salt,false); ? EDIT: šķiet, ka man vnk nepieciešams šādi, ne? $authenticated = maketoken($uid,pw($parole),$autorenew,mktime()+$remember,'');//izveidojam vērtību, kas derīga $remember sekundes jo reāli tagad pw nav ar saltu, bet ģenerētas ar pw() fju. Tātad pārbaudu vai db pw sakrīt ar post pw un tad maketoken'u taisu. Edited October 14, 2009 by anonīms Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 Nu, ņemot vērā, ka viss tiek šifrēts ar servera atslēgu, tad vari tās paroles nelikt nemaz tajā tokenā... Cik labi vai slikti tas sanāk, jāpadomā. Principā jau iespējams pietiek ar to, ka var veiksmīgi atšifrēt un nokonstatēt, ka kontrolsumma ir derīga un ka laika zīmoga lauka vērtība nav par mazu (beidzies derīguma termiņš). Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 14, 2009 Author Report Share Posted October 14, 2009 (edited) Nu pašlaik esmu ticis tik tālu: http://paste.php.lv/eebd605fd4d19d841acfe78e63b76139?lang=php Kods kā tāds aiziet normāli līdz pat login pārbaudei, kur esmu nedaudz apjucis.. if(!check_pw($mas[0],hash('sha512',pack('H*',$mas[1]).pack('H*',$salt),false))){ return 5;//nepareiza parole - ļoti savādi!!! Laikam nomainīta parole } līdz šai rindai viss ok.. bet nu kā man izlabot šīs rindiņas (saprotu, ka lieks tur ir hash(), bet kā man izveidot, lai pārbauda ar manu pw()? Edited October 14, 2009 by anonīms Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 Nu, ja Tu tur glabā to pašu hashu, kuru DB, tad raksti vienkārši: if(!check_pw($mas[0],$mas[1])){ Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 14, 2009 Author Report Share Posted October 14, 2009 (edited) tāpat izmet man return 5. Kur un kā tie iegūts tas xmas[1]? Vnk no db izvilkts? EDIT: sapratu kā tie iegūts xmas (no cepuma $mm, kurš tiek savukārt iegūts no cepuma) bet nu tāpat netiku skaidrībā kapēc met return 5 EDIT: 2 a kas tas par $user_data? 202 rinda. tur gadījumā nevajag kādu datu no db? EDIT: 3 echo $mas rāda tukšumu... tad iespējams vaina ir tur, tik ko likt $user_data vietā? EDIT: 4. Galvenais jautājums... kā īsti parbauda vai ir ielogojies vai nav? tiek izmantots cepums un viņš tiek salīdzināts ar ko? cepums == salt? vai kā tur notiek? Nu principā man ir tikai jāzin vai teiksim ielogojoties arī db nevajag nomainīt saltu Edited October 14, 2009 by anonīms Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 Nu uztaisi echo tam visam... pirms return 5... varbūt rodas idejas: print_r($mas); Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 $user_data bija domāts kā lauks, kuru var izmantot "sesijas" datu glabāšanai. Tas nav obligāts. Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 14, 2009 Author Report Share Posted October 14, 2009 Array ( [0] => 1 [1] => 3934396130656433363861656433643833333534393739363933336534333139 [2] => 0 [3] => 1989568926 [4] => -641242685 [5] => [6] => 913e1104a83528f327150346ecdefd7246232cc23f7da39850b9ed7e8177f7c052c00a00d8b791b11f215844beaa626093ec6e1273574d537dae2d59dbcedd37 ) 5 Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 Nu un vai lietotājam DB parole glabājas kā: 3934396130656433363861656433643833333534393739363933336534333139 ? Pamēģini šādi: if(!check_pw($mas[0],pack('H*',mas[1])){ Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 14, 2009 Author Report Share Posted October 14, 2009 Nē, 949a0ed...... a problēma nevarētu būt tad, kad vēl tiek veidots tikai tokens? maketoken. teiksim kkur šeit, kur tiek savādāk kkas samontēts: $data=$uid.','.bin2hex($parole) .','.intval($autorenew).','.intval($expire). ','.ip2long($_SERVER['REMOTE_ADDR']) . ',' . bin2hex($info);//info - papildus mainīgie utt, kas jāsaglabā no vienas lapas uz otru Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 kā īsti parbauda vai ir ielogojies vai nav? tiek izmantots cepums un viņš tiek salīdzināts ar ko?cepums == salt? vai kā tur notiek? Nu principā man ir tikai jāzin vai teiksim ielogojoties arī db nevajag nomainīt saltu Pārbauda vai: cookie vērtību atšifrējot ar servera atslēgu izpildās nosacījums, ka pirmo sešu lauku kontrolsumma (HMAC ar servera atslēgu) sakrīt ar piestādīto kontrolsummu (septīto lauku). Kā arī vai nav mainījusies IP adrese $mas[4], nav beidzies temiņš $mas[3]. Edit: if(!check_pw($mas[0],pack('H*',mas[1])){ būtu jāstrādā. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.