senters Posted December 8, 2011 Report Share Posted December 8, 2011 (edited) Jautājums šoreiz par to kāds ir nosacīti labākais variants aizmirsi paroli fīčai? Iepriekš neko tādu neesmu taisījis, tādēļ to iztēlojos šādi: 1. Sadaļa "Aizmirsi paroli?", kur ir primitīvs inputlauks "e-pasts". 2. Cilvēks ievada savu e-pastu, kurš sistēmā kalpo kā username, un sistēma skatās vai šāds e-pasts tiek lietots "user" tabulā. 3. Ja ir --> ar php tiek uzģenerēts jauns strings (parole), kura pēc tam insērtota "user" tabulā "password" laukā pārveidota SHA1/MD5 formāta. Paroles ģenerēšanai izmantošu kaut ko līdzīgu šai f-jai http://www.webtoolki...-generator.html. Ja nav --> kļūdas msg, ka šāds meils nav sistēmā. 4. Uz meilu tiek aizgrūzta jaunā parole teksta formā. Tālāk jau paroles nomaiņa attiecīgi profilā. Tāpat jautājums, vai reģistrēšanās ir izveidota daudz maz pareizi: 1. Ja reģistēšanās veiksmīga -> inserto jaunu lietotāju "user" tabulā (id, email, password, active, ...), paralēli inserto "user_activate" tabulā (id, user_id, key, date_created) sistēmas uzģenerētu activate key (random UUID). Lietotājs sākumā ir ar active "N". 2. Uz meilu tiek nomests links www.blabla.com/confirm.php?key=b1ad9467-5de9-4403-ac1e-f88594ba2e2c. Ja key eksistē db un lietotājs ir neaktīvs, tad active statuss tiek mainīts uz "Y" un ielogots sistēmā piešķirot sesijas idu. Ja key pareizs, bet statuss Y, tad msg, ka profils jau aktivizēts. Ja key nepareizs, aizmet uz index. Edited December 8, 2011 by senters Quote Link to comment Share on other sites More sharing options...
daGrevis Posted December 8, 2011 Report Share Posted December 8, 2011 Primitīvā ideja tev ir skaidra. Derētu tikai nevis ģenerēt paroli un sūtīt to plain textā un e-pastu, bet gan aizsūtīt uz e-pastu linku, kurš varētu izskatīties: /forget_password/?user=daGrevis&token={token} ...kur tokens ir uzģenerēts strings. Plus, ļauj nomainīt paroli izmantojot vienu tokenu tikai, piemēram, 24 h. Ja tokens ir pareizs dotajam lietotājam, tiek piedāvāts nomainīt paroli. Uzmanību! Tokenam jābūt randomam, neuzminam un pietiekami garam! P.S. Paroles vairs neklājas hešot ne ar SHA-1, kur nu vēl ar MD5 hešu. Bcrypt būtu tīri okej... (: Quote Link to comment Share on other sites More sharing options...
briedis Posted December 8, 2011 Report Share Posted December 8, 2011 (edited) Iesaku šādu metodi. Nevis nomaini automātiski paroli, bet izsūtī lietotājam uz e-pastu kodu, ar kuru ir iespēja nomainīt paroli. Pieglabā datubāzē, protams, to kodu, un lietotāju, kuram domāts šis kods. EDIT: kamēr rakstīju daGrevis jau līdzīgu domu izmeta :) Edited December 8, 2011 by briedis Quote Link to comment Share on other sites More sharing options...
senters Posted December 8, 2011 Author Report Share Posted December 8, 2011 (edited) ā, nu tad šķiet, ka līdzigi kā to daru ar useru reģistrēšanos. (sk. sākumtopikā pievienoju klāt aprakstu). jātaisa tabula "forgot_password" (id, user_id, key) kur keyu ģenerēs ar UUID un sūtīs linku uz epastu, tālāk to pārbaudot, ja key valīds uzreiz popups lapā ar paroles nomainīšanas formu (2x jaunā parole). Edited December 8, 2011 by senters Quote Link to comment Share on other sites More sharing options...
senters Posted December 8, 2011 Author Report Share Posted December 8, 2011 Tā, ka esmu no akmens laikmeta, daGrevis, vai vari ar piemēru / linku parādīt kā hešot paroles uz Bcrypt? Pie viena palūgšu nelielu konsultāciju kādēļ hešošana md5/sha1 ir alu cilvēku līmenī salīdzinot ar tevis ieteikto Bcrypt? Quote Link to comment Share on other sites More sharing options...
briedis Posted December 8, 2011 Report Share Posted December 8, 2011 senter, tabulai vēl pievieno lauku, kad tas kods tika ģenerēts, un, kā jau daGrevis minēja, nosaki derīguma termiņu kuponam, teiksim, tās pašas 24 stundas. Kad atlasi kodu, pārbaudi vai nav pagājušas 24h. Ja ir, pasaki lietotājam, lai uzģenerē vēlreiz to kodu. Quote Link to comment Share on other sites More sharing options...
senters Posted December 8, 2011 Author Report Share Posted December 8, 2011 jā, date_created cenšos likt visām db tabulām, kur ir kaut minimāla nepieciešamība. par 24h čekošanu, ņemšu vērā. lietotāju aktivizēšanai gribēju izmantot arī laika pārbaudi (ja reģistrējies un 3 dienas neesi aktivizējis savu profilu, ieraksts ar attiecīgo user_id / key no tabulas "user_activate" dzēšas, paralēli arī no "user" tabulas neapstiprinātais lietotājs. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted December 8, 2011 Report Share Posted December 8, 2011 Par BCrypt. Ģenerēšana ar http://www.openwall.com/phpass/ . Quote Link to comment Share on other sites More sharing options...
senters Posted December 8, 2011 Author Report Share Posted December 8, 2011 Par BCrypt links nestrādā - http://screencast.com/t/91J0jGaiZ Quote Link to comment Share on other sites More sharing options...
daGrevis Posted December 8, 2011 Report Share Posted December 8, 2011 Salaboju. Quote Link to comment Share on other sites More sharing options...
senters Posted December 8, 2011 Author Report Share Posted December 8, 2011 Sanāk, ka MD5, Sha1 uzlaušanai nav nepieciešami superdzelži, bet pietiek ar 40 sekundēm pie nosacījuma ja ūseri lieto paroles, kur visi mazie alfabēta burti 6 simbolu garumā? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted December 8, 2011 Report Share Posted December 8, 2011 Pat ja parole būs šāda... <(~=s1=3ds!13i4nR2WYJt"{1)9+isfa Lai uzģenerētu: $pool = range(' ', '~'); $pw = ''; $last_key = count($pool) - 1; for ($i = 0; $i < 32; ++$i) { $pw .= $pool[mt_rand(0, $last_key)]; } var_dump($pw); ...**bet** tās būs hešota ar MD5... nepaies diena, kad tā jau būs atlauzta. P.S. Varbūt ne diena, bet doma ir skaidra par MD5. Un kurš normāls lietotājs lietos tādu paroli?! Quote Link to comment Share on other sites More sharing options...
senters Posted December 8, 2011 Author Report Share Posted December 8, 2011 Tu kā moderātors būdams, piemet tēmai galā "+ paroļu drošība". Noteikti citiem arī noderīgi uzzināt šīs lietas. Tagad tikai jāsaprot kā lietot bcrypt. Quote Link to comment Share on other sites More sharing options...
senters Posted December 9, 2011 Author Report Share Posted December 9, 2011 uztaisīju šādi. 1. spiež linku aizmirsi paroli, atveras modālais logs ar epasta ievadi, ievada epastu (nočeko vai ir db "user" tabulā) 2. ja ir -> uzģenerē random UUID key (inserto db tabulā "forgot_password") un iebāž to linkā /forgot_password.php?token=<key> ko sūta uz meilu. ja nav -> error msg. 3. spiežot meilā uz linka /forgot_password.php?token=<key> aizmet uz lapu un nočeko vai db ir šāds token key. 4. ja ir -> atver uzreiz modālo logu ar paroles maiņu. ja nav -> sūta uz index neatverot modālo logu. 5. mainot paroli, ja jaunās ievadītās paroles sakrīt, parāda OK msg, apdeito attiecīgajam userim paroli uz jauno un te gribētu dzēst visus ierakstus "forgot_password" tabulā, kuros fito konkrētā deguna user ID. Darbosies arī validācija uz to, ka deguns var 1x 24 stundās tikai pieprasīt jaunu paroli. To čekos pēc pēdējā ieraksta "forgot_password" tabulā (laiku rēķinot pēc date_created). Ja pēc pēdējā pieprasījuma ir palicis mazāk kā 24h, error msg. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted December 9, 2011 Report Share Posted December 9, 2011 Viss ir jauki, bet kas ir 'deguns'?! 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.