anonīms Posted October 13, 2009 Report Share Posted October 13, 2009 Tātad nepieciešams pāriet no sesijām uz cepumiem, lai var izmantot remeber me f-ju un galvenais, lai tas viss būtu droši. Tagadējās kods: http://paste.php.lv/d3bb0ea8381fd87dca541c3b0c6188e4?lang=php Kas nepieciešams, lai pārietu uz cepumiem? Cik esmu dzirdējis vajag db izveidot vēl papildus kollonu, cookie_hash vai kko tādu, bet īsti nezinu kam tas domāts. googlē meklēju, bet tur ir pārāk daudz liekā (praktiski visi veidoti ar klasēm) un php.lv neatradu. Gaidu ierosinājumus kā pāriet uz cepumiem un galvenais, lai tas būtu droši. Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 13, 2009 Report Share Posted October 13, 2009 Nu, vari papētīt, kas man sanāca pa šo tēmu... http://php.lv/f/topic/11116-lietotaju-autentificesana/ Cerams, saproti, ka arī šobrīd, lietojot sesiju mehānismu, tiek izmantoti cookie sesijas ID glabāšanai pārlūkā... Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 13, 2009 Author Report Share Posted October 13, 2009 lēnām pētot kodu viens ātrs jautājums.. kā tie ģenerēts šis salts? lietotājam reģistrējoties vai ielogojoties? (neesmu vēl failus pētijis, veidoju tik db struktūru) Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 13, 2009 Report Share Posted October 13, 2009 Sāls tiek ģenerēta: *) Piereģistrējot lietotāju *) Nomainot paroli arī sāls tiek pārģenerēta Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 13, 2009 Author Report Share Posted October 13, 2009 (edited) un teiksim, ja man jau ir reģistrēti pārsimts lietotāji, tad tiem, kuri jau ir reģistrējušies es pie logina varu pārbaudit if(empty(salts) { uzģenerējam saltu } vai arī man savādāk jau reģistrētajiem viņu pielikt? EDIT: un jā. varētu paskadrot kapēc ir domāta tāda get_salt f-ja? kapēc teiksim nevar vnk select salt from lietotaji where id = ? ? Edited October 13, 2009 by anonīms Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 13, 2009 Report Share Posted October 13, 2009 Nu, jā... jau reģistrētiem vari uz pārejas periodu izveidot procedūru, kas neesoša sāls gadījumā pārkonvertē uz jauno sistēmu... vai arī atkarībā no tā, kādā formātā šobrīd glabājas paroles, vari uztaisīt skriptu, kas izmanto db esošo paroli (vai, cerams, tās hashu), lai uzģenerētu jaunā tipa hashu... [edit] Funkcija get_salt būtībā tieši to arī dara, bet sakarā ar to, ka šī lieta ir vajadzīga vairākās koda vietās, tādēļ arī pataisīta par funkciju. Lai nevajadzētu veikt labojumus vairākās vietās. Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 13, 2009 Author Report Share Posted October 13, 2009 (edited) EDIT: un jā. varētu paskadrot kapēc ir domāta tāda get_salt f-ja? kapēc teiksim nevar vnk select salt from lietotaji where id = ? ? piemērs: function get_salt($uid){ $q = mysql_result(mysql_query("SELECT salt FROM users WHERE id = '".$uid."' LIMIT 1"),0,0); return $q; } Edited October 13, 2009 by anonīms Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 13, 2009 Report Share Posted October 13, 2009 Var arī tā, bet es biju izlēmis visur, kur var izmantot vismaz prepared statementus. un, protams, laikam drīzāk biji domājis: function get_salt($uid){ $q = mysql_fetch_array(mysql_result(mysql_query("SELECT salt FROM users WHERE id = '".$uid."' LIMIT 1"),0,0)); return $q[0]; } un cerams pirms tam pārbaudīji, kaa iekš $uid nekādas sliktas lietas nav sarakstītas ;) Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 13, 2009 Author Report Share Posted October 13, 2009 (edited) nu tajā uid neko nevarēs ierakstīt, jo tas id tiks padots bišk savādāk.. Tāk, nu esmu saskāries ar pirmo ķibeli. $salta_parbaude = mysql_fetch_assoc($parbaude_vai_ok); if(empty($salta_parbaude['salt'])) { $salt = make_salt(); mysql_query("UPDATE ".PREFIX."lietotaji SET salt = '".$salt."' WHERE lietotajvards = '".mysql_real_escape_string($_POST['user'])."'") or die(mysql_error()); } tikai vēl testēju to salt. tas nav gala iznākums.. Tātad salt ir char(128) bet ir tā, ka tas salts paliek tukšs.. function make_salt(){ $salt=''; for($x=0;$x<64;$x++){ $salt.=chr(mt_rand(0,255)); //ģenerējam sāli ar garumu 512b } return $salt; } db paliek tukšs.. iznākums tam $salt sanāk: aU?OQgۍtsP!Xav4Scgj!Ml0oD5PB֎DXċW Edited October 13, 2009 by anonīms Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 13, 2009 Report Share Posted October 13, 2009 Es DB glabāju bin2hex($salt) Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 13, 2009 Author Report Share Posted October 13, 2009 nu update salt = bin2hex($salt) Db tas parādas kā Iepsējams es kko esmu nepareizi sapratis... Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 13, 2009 Report Share Posted October 13, 2009 šajā failā ir aprakstītas funkcijas, kas izveido, maina datus iekš DB: http://paste.php.lv/7694?lang=php hash speciāli tiek izsaukts ar pēdējo parametru "false", lai tiktu atgriezti tieši tie 512biti... pēc tam ar PHP funkciju bin2hex vērtība tiek pārtaisīta heksadecimālajā pierakstā. bin2hex() ir PHP funkcija, nevis MySQL. ;) Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 13, 2009 Author Report Share Posted October 13, 2009 ok, salts tagad ir ok :] mēģināšu taisīt pārējo. Quote Link to comment Share on other sites More sharing options...
anonīms Posted October 14, 2009 Author Report Share Posted October 14, 2009 Sķiet, ka viss izdevās. Jaunas logins ar cepumiem: http://paste.php.lv/58a33177f23eecceb6d898d2c9d3222a/nonum Gribētos tagad zināt vai no drošības puses nevajag neko pielikt vai atņemt? (galvenokārt jau fjā checklogin()) Paldies Aleksejam. Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted October 14, 2009 Report Share Posted October 14, 2009 Manuprāt galīgi nav ok ar drošību. Kas tad Tev tajā cookie glabājas? salt? Nē, tas ir galīgi aplami. Tad sanāk, ka vienmēr un visur lietotāju identificēs viena un tā pati vērtība un es uzzinot salt vērtību bez problēmām varu ielogoties. Salt izmanto pavisam citam mērķim: lai ja lietotājs A izvēlas paroli suns un lietotājs B izvēlas paroli suns tomēr db saglabātās hash vērtības: Piemēram: hash($salt . $password) būtu šiem lietotājiem atšķirīgas. Izlasi to rakstu par "Secure stateless session cookies" 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.