Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Przypomnienie hasła
inny02
post
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


Witam,

chcę dodać do tego istniejącego kodu, przypomnienie hasła, gdy hasło będzie kodowane w bazie.
Skrypt wysyła na email zapomniane hasło z bazy w formie jawnej, a jak tutaj dodać, jeśli użytkownik wyśle formularz przypomnienia hasła to:
generuje losowe hasło, następnie hasło haszuje w md5 i zapisuje w bazie.
Hasło to losowe(ale hasło przed z haszowaniem) wysyła na email, użytkownik może już się zalogować przez nowe hasło.

  1. if (isset($_POST["forgot"])) {
  2. $username = htmlspecialchars(trim($_POST["username"]));
  3. $email = htmlspecialchars(trim($_POST["email"]));
  4.  
  5. if (($username != "") || ($email != ""))
  6. {
  7. if ($username != "")
  8. $q = "SELECT * FROM `members` WHERE username = '$username'";
  9. else
  10. $q = "SELECT * FROM `members` WHERE email = '$email'";
  11.  
  12.  
  13. if(!($result_set = mysql_query($q))) die(mysql_error());
  14. $number = mysql_num_rows($result_set);
  15.  
  16. if (!$number) {
  17. echo "Sorry ! No account with the specified username or email exists";
  18. showForm();
  19. }
  20. else {
  21. $r = mysql_fetch_array($result_set);
  22. $email1 = $r['email'];
  23. $username = $r['username'];
  24. $password = $r['password'];
  25.  
  26.  
  27. $to = $email1;
  28. $subject = "$webtitle - Password Recovery";
  29. $body = "Hello $username, \n\nYou requested for your $webtitle account password recovery.\nYour registration information is shown below:\n\nUser: $username\nPass: $password\n\nThanks!\n{$website}";
  30. $headers = "From: $webtitle <{$website}>";
  31.  
  32.  
  33. if (mail ($to, $subject, $body, $headers))
  34. echo "An email has been sent with your password to the email address you specified during registration.";
  35. else
  36. { echo "Sorry ! The password recovery email could not be sent due to some reason."; showForm(); }
  37.  
  38. }
  39. }
  40. else
  41. { echo "Please give a username or email atleast !"; showForm(); }
  42. }
  43. else
  44. {
  45. if ($session == false)
  46. showForm();
  47. else
  48. echo "Sorry ! You are already logged in.";
  49. }


wiem, że trzeba użyć funkcji do generowania jakieś ciągu, UPDATE do bazy itd. tylko nie potrafię tego dołączyć do istniejącego kodu php.

Z góry dzięki za pomoc

Pozdrawiam
Go to the top of the page
+Quote Post
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Cytat(inny02 @ 19.09.2009, 14:57:38 ) *
Skrypt wysyła na email zapomniane hasło z bazy w formie jawnej, a jak tutaj dodać, jeśli użytkownik wyśle formularz przypomnienia hasła to:
generuje losowe hasło, następnie hasło haszuje w md5 i zapisuje w bazie.
Hasło to losowe(ale hasło przed z haszowaniem) wysyła na email, użytkownik może już się zalogować przez nowe hasło.


Taki sposób tworzenia nowego hasła jest moim zdaniem niewłaściwy. Czemu Ty na serwerze masz tworzyć nowe hasło a nie użytkownik sam sobie? Lepiej wysłać użytkownikowi link do resetowania hasła, on podaje nowe i te nowe jest hashowane i zapisywane do bazy. Wysyłanie hasła otwartym tekstem przez maila nie jest do końca bezpieczne.
Go to the top of the page
+Quote Post
inny02
post
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


wiem (IMG:style_emoticons/default/winksmiley.jpg) ale strona to z niczym poważnym tylko hosting obrazków to wystarczy takie rozwiązanie
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #4





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Vokiel ale link to strony resetującej hasło jest zbyt niebezpiecznym rozwiązaniem. Ktoś niewsłaściwy dostanie taki link i wzasadzie będzie mógł zmienić hasło każdej osobie
Go to the top of the page
+Quote Post
vokiel
post
Post #5





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


@Mlodycompany - zauważ, że bardzo dużo, poważnych serwisów tak robi. Nie dajesz przecież linka w postaci resetuj_hasło.php?mail=twoj@mail.pl, tylko dajesz link, w którym masz hash. Hash powstaje ze złączenia kilku informacji: salt, mail, data rejestracji. Zapisywany jest w bazie wraz z datą utworzenia. Następnie ktoś wchodzi na link i podaje adres mailowy. Szuka się w bazie konta, z tym adresem email, dla którego został utworzony hash, sprawdza się go z tym z adresu, oraz sprawdza datę ważności (hash do resetowania musi mieć jakiś okres ważności - np tydzień). Dopiero spełnienie tych wszystkich warunków daje jakieś poczucie bezpieczeństwa. Sam hash'a nie wymyślisz, bo nawet jeśli znasz datę rejestracji to nie znasz dokładnej godziny, minuty i sekundy no i oczywiście pozostaje jeszcze salt...

@inny02
Schemat postępowania:
1. Kliknięcie w przycisk "nie pamiętam hasła"
2. Wyświetlenie formularza z polem na adres email podany podczas rejestracji. (widzę, że masz oddzielnie username a oddzielnie email - w znaczeniu, że email nie jest loginem - zatem jeszcze dodajesz pole username)
3. Po wysłaniu formularza sprawdzasz w php czy dla danego username jest podany taki email jak przesłany w formularzu, jeśli nie to wyświetlasz komunikat, że dane niepoprawne. Jeśli jest ok, patrz pkt 4
4. Tworzysz sobie hash (jak napisałem wyżej: username+salt+email+cokolwiek tam jeszcze chcesz), zapisujesz go do kolumny np hash, a obok, do kolejnej datę utworzenia.
5. Tworzysz wiadomość email dla użytkownika a w nim link do resetowania hasła: restetpass.php?key=$hash
6. Po wejściu na stronę z danego linku wyświetlasz formularz z polami username + email +nowe_haslo +nowe_haslo_sprawdzenie
7. Odbierasz wyniki z formularza i sprawdzasz ich poprawność:
a). czy email + username się zgadza
(IMG:style_emoticons/default/cool.gif) . czy dla danego hashu jest w bazie konto z podanym email + username
c). czy hash jest aktualny
d). czy hasło i jego powtórzenie są identyczne
8. Jeśli wszystko jest ok, zapisujesz (zhashowane) hasło do bazy, usuwasz hash i datę jego wstawienia, ew wysyłasz maila potwierdzającego zmianę hasła, no i oczywiście komunikat, że hasło zostało zmienione, możesz też od razu użytkownika zalogować.

No to chyba z grubsza tyle (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 17:44