Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]przypomnienie/zmiana zapomnianego hasła
blackbone
post 4.02.2009, 15:39:28
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.02.2009
Skąd: Dublin

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


witam, haha.gif
Czy ktokolwiek wie, jak wymusić zmianę, albo przypomnieć użytkownikowi hasło zapisane w bazie mysql(używając phpmyadmin). Do weryfikacji chcę użyć adresu majlowego, z wysłaniem przypomnianego hasła sobie poradzę, bynajmniej potrzebuję pomocy. rolleyes.gif


--------------------
Nie myśl że wszyscy wiedzą wszystko, wiedz, że TY wiesz najmniej
Go to the top of the page
+Quote Post
Crozin
post 4.02.2009, 15:44:10
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Hasło w bazie przechowywane jest w formie jakiegoś hasha czy może jawnie?
Go to the top of the page
+Quote Post
blooregard
post 4.02.2009, 16:05:52
Post #3


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




1. Opcja w panelu administracyjnym (np. "Przypomnij o zmianie hasła") - skrypt wybiera z bazy uzytkowników, których data zmiany hasła (odpowiednie pole w tabeli) jest starsza niz ustawiony w innej opcji interwał czasowy (np. 30 dni), następnie w pętelce wysyła odpowiedniego maila do usera. Po zaktualizowaniu przez niego hasła pole w kolumnie z datą jest odpowiednio modyfikowane

2. To samo, ale wrzucone do cron-a, z częstotliwością uruchamiania np. co godzinę smile.gif

Zakładam, że to hasło user może sobie zmienic sam, np. w jakimś tam swoim profilu

Ten post edytował blooregard 4.02.2009, 16:06:40


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
blackbone
post 4.02.2009, 18:33:09
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.02.2009
Skąd: Dublin

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


hasło nie jest hashowane, a mi chodzi o przypomnienie zapomnianego hasła, słyszałem, że lepiej wymusić zmianę, dlatego też zawarłem to w temacie.
Oto mój kod:
CODE

<?
mysql_connect ("localhost", "root", "*******")
or die ("Nie można połączyć z bazą danych!");
mysql_select_db ("notatnik_users")
or die ("Nie można czytać tabeli");
$user_dane = mysql_query("SELECT * FROM user_primary WHERE usr_name='$usr' and usr_email='$email' and usr_pswrd='$pswrd'")
or die ("BŁĄD!Nie ma danych w tabeli lub błąd w pytaniu!");
while ($rekord=mysql_fetch_assoc($user_dane)){
$usr = $rekord['usr_name'];
$email = $rekord['usr_email'];
$pswrd = $rekord['pswrd'];

}
if ($_POST['email'] && $_POST['usr'] && $_POST['pswrd']){
//wypisz lub wyślij hasło na mail`a
} else {
print '
<form method=post>
<TABLE align=center cellpadding=4 cellspacing=0>
<TR>
<TD><input type=hidden name=pswrd value='.$pswrd.'><input type=text name=usr value="Nazwa użytkownika"></TD>
<TD><input type=text name=email value="Twój email"></TD>
<td>&nbsp;</td>
<TD align=right><input type=submit value=Przypomnij></TD>
</TR>
</TABLE>';
}
?>

Podejrzewam, że coś jest źle w zapytaniu mySQL...


--------------------
Nie myśl że wszyscy wiedzą wszystko, wiedz, że TY wiesz najmniej
Go to the top of the page
+Quote Post
blooregard
post 4.02.2009, 20:05:09
Post #5


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




1. Najpierw poprawka (zwróc uwagę na znaki ' i " )
Kod
$user_dane = mysql_query("SELECT * FROM user_primary WHERE usr_name='".$usr."' and usr_email='".$email."' and usr_pswrd='".$pswrd." ' ")


2. Nie widzę w zapytaniu żadnego kryterium, które wskazywałoby na fakt przeterminowania hasła. Wysyłasz zawsze tego maila z przypomnieniem hurtem, do wszystkich, nawet tych, co zmienili hasło 5 minut wcześniej ?


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
blackbone
post 4.02.2009, 23:38:45
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.02.2009
Skąd: Dublin

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


Bo mi nie chodzi o zmianę dla bezpieczeństwa, tylko dlatego że ktoś zapomniał, np. podaję mój adres email, nazwę użytkownika, aplikacja porównuje dane w formularzu z tymi które są w bazie danych, jeśli się zgadza wysyła na podany email hasło zapisane w bazie.


--------------------
Nie myśl że wszyscy wiedzą wszystko, wiedz, że TY wiesz najmniej
Go to the top of the page
+Quote Post
Crozin
post 5.02.2009, 14:37:45
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeżeli hasło przechowujesz w formie jawnej to możesz zrobić prawdziwe "przypominanie".

1) Formularz w którym podaje się adres email i ew. login
2) Pobierasz hasło z tabeli użytkowników gdzie email = email_z_formularza (jeżeli dodatkowo jest login to jeszcze dodajesz w warunku AND login = login_z_formularza)
3) Na podany adres email wysyłasz hasło (mail" title="Zobacz w manualu PHP" target="_manual)
4) Koniec

A jeżeli chciałbyś zrobić generowanie nowego hasła to sprawa jest nieco bardziej skomplikowana (ale nadal bardzo prosta)
1) Jak wcześniej
2) Jak wcześniej z tym, że pobierasz ID, login, adres-email
3) W tabeli z użytkownikami musisz mieć dodatkową kolumnę, nazwijmy ją verifCode (typu CHAR(32)). Domyślna wartość jaką będzie przyjmowała to NULL.
4) Teraz musisz wygenerować losowy ciąg, który zostanie wysłany na maila w celu weryfikacji
  1. <?php
  2. $verifCode = md5(uniqid(mt_rand(), true));
  3. ?>

5) Kod ten zapisujesz do kolumny verifCode w tabeli użytkowników gdzie id = id_wyciagniete_ze_wczesniejszego_zapytania
6) Do użytkownika wysyłasz maila, w którym znajduje się link w postaci: example.com/pass.php?userid=XX&verif=YYY Gdzie XX to ID użytkownika, a YYY to wygenerowany kod ($verifCode)
7) Tworzysz plik pass.php
8) W nim sprawdzasz czy dla użytkownika o ID = $_GET['userid'] kolumna verifCode = $_GET['verif'].
9) Jeśli nie, nie robisz nic
10) Jeśli tak to rozpoczynasz generowanie hasła
11) Musisz wygenerować nowe hasło. Możesz to zrobić np. przy pomocy
  1. <?php
  2. $chars = 'qwertyuiopasdfghjklzxcvbnm1234567890!@#$%^&*()_+';
  3. $newPass = mb_substr(str_shuffle(str_repeat($chars, 4)), 0, mt_rand(6, 9));
  4. ?>

12) Tak wygenerowane hasło zapisujesz w bazie danych i wyświetlasz je użytkownikowi
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 10:17