Jump to content
php.lv forumi

Aizmirsi paroli fīča


senters

Recommended Posts

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 by senters
Link to comment
Share on other sites

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... (:

Link to comment
Share on other sites

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 by briedis
Link to comment
Share on other sites

ā, 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 by senters
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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?!

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...