Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wygrawerowanie i przesłanie nowego hasła
Forum PHP.pl > Forum > PHP
Lejto
Mam kod który graweruje nowe hasło updatuje do bazy przesyła je na danego maila.
Kod był wiele razy modyfikowany więc niektóre elementy mogą być niepotrzebne.
Raz kod zadziałał zupdatował nowe hasło do bazy ale nie wysłał mailem wiadomość doszła ale bez hasła winksmiley.jpg
Teraz ani to ani to nie działa.
Kody: (kody formularza nie podaje bo chyba nie ma po co)
  1. <?php
  2. tworz_naglowek_html('Ustawianie hasła');
  3.  
  4. // utworzenie krótkiej nazwy zmiennej
  5. $user = $_POST['user'];
  6.  
  7. try
  8. {
  9.  $haslo=ustaw_haslo($user);
  10.  powiadom_haslo($user, $haslo);
  11.  echo 'Nowe hasło zostało przesłane na adres poczty elektronicznej.<br />';
  12. }
  13. catch (Exception $e)
  14. {
  15.  echo 'Hasło nie mogło zostać ustawione. Proszę spróbować póĽniej.';
  16. }
  17. tworz_HTML_URL('?co=log', 'Logowanie');
  18. tworz_stopke_html();
  19. ?>

i grawerowanie
  1. <?php
  2. function pobierz_losowe_slowo($dlugosc_min, $dlugosc_max)
  3. //pobranie losowego słowa ze słownika o okre?lonej długo?ci zwrócenie go
  4. {
  5.  global $haslo;
  6.  
  7. $ile_liter = 4; // Ile liter ma mieć losowany ciąg
  8. $litery = 'qwertyuiopasdfghjklzxcvbnm1234567890'; // Zestaw liter z jakich ma być zbudowany ciąg
  9.  
  10. // 'Zamieszanie komory losującej'
  11. // UWAGA: od wersji 4.2.0 PHP nie jest to juz konieczne
  12. srand((double)microtime()*1000000);
  13.  
  14. $haslo = ''; // Ustawienie początkowe hasła
  15. for ($i=0;$i<$ile_liter;$i++)
  16.  { $haslo .= substr($litery,(rand()%(strlen($litery))),1); };
  17. }
  18.  
  19.  
  20.  
  21. function ustaw_haslo($user)
  22. // ustawienie hasła użytkownika na losowš warto?ć 
  23. // zwraca nowe hasło lub false w przypadku niepowodzenia
  24. { 
  25.  echo $haslo;
  26. $wynik = mysql_query("update uzytkownik
  27.  set haslo = sha1('$haslo')
  28.  where user = '$user'");
  29. if (!$wynik)
  30.  echo 'Zmiana hasła nie powiodła się.'; // hasło nie zmienione
  31. else
  32. return $haslo; // hasło zmienione pomyślnie
  33. }
  34.  
  35. function powiadom_haslo($user, $haslo)
  36. // powiadomienie użytkownika o zmianie hasła
  37. {
  38.  
  39. $wynik = mysql_query("select email from uzytkownik
  40.  where user='$user'");
  41. if ($wynik == false)
  42. {
  43. echo 'Nie znaleziono adresu e-mail<br>';
  44. }
  45. else
  46. {
  47. $wiersz = mysql_fetch_object($wynik);
  48. $email = $wiersz->email;
  49. $od = "From: admin@admin.pl r\n";
  50. $wiad = "Hasło na stronie ddd zostało zmienione na:r\n"
  51. ."--------------------r\n"
  52. .$haslo
  53. ."r\n--------------------r\n"
  54. ."Proszę zmienić je przy następnym logowaniu. r\n"
  55. ."W razie niedziałania hasła lub jakiego kolwiek błędu proszę powiadomić administratora strony r\n";
  56. echo 'elo';
  57. echo $haslo;
  58.  
  59. if (mail($email, 'Przesłanie nowego hasła', $wiad, $od))
  60. return true;
  61. else
  62. echo 'Wysłanie e-maila nie powiodło się';
  63. }
  64. }
  65. ?>
artega
Twój skrypt nie wysyła hasła, ponieważ takiego nie tworzy przez funkcje ustaw_haslo - chyba taka jest idea, prawda?
marcio
W funkcji pobierz_losowe_haslo masz global po co ono ma byc w ustaw haslo bo z tamdat pobierasz zmienna $haslo a ja tworzysz w 1 funckji wiec jest zbedne
Sproboj tak
  1. <?php
  2. function pobierz_losowe_slowo($max) { //tak nie szybciej i latwiej??
  3.  
  4. $nowe_haslo = substr(md5(time()), 0, $max);
  5. return $nowe_haslo;
  6. }
  7.  
  8.  
  9. function powiadom_haslo($user, $pass) {
  10.  
  11. if($wynik = mysql_query('select email from uzytkownik where user = "'.$user.'" limit 1')) {
  12.  
  13. $wiersz = mysql_fetch_assoc($wynik);
  14. $email = $wiersz['email'];
  15. $od = "From: admin@admin.pl r\n";
  16. $wiad = 'Hasło na stronie 2c-nowe.com zostało zmienione na: '.$pass.'
  17. Proszę zmienić je przy następnym logowaniu
  18. W razie niedziałania hasła lub jakiego kolwiek błędu proszę powiadomić administratora strony';
  19.  
  20. if(mail($email, 'Przesłanie nowego hasła', $wiad, $od)) echo('Email z nowym haslem zostal wyslany');
  21. else echo('Wysłanie e-maila nie powiodło się');
  22. }
  23. else echo('Nie znaleziono email'a');
  24. }
  25.  
  26.  
  27. function ustaw_haslo($user, $new_pass){ 
  28.  
  29. if($wynik = mysql_query('update uzytkownik set haslo = "'.sha1($new_pass).'" where user = "'.$user.'"')) echo('Zmieniono haslo')
  30. else echo('Blad przy zmianie hasla');
  31.  
  32. }
  33.  
  34. $login = $_POST['login'];
  35.  
  36. $haslo = pobierz_losowe_haslo(8); // tu masz nowe haslo
  37. ustaw_haslo($login, $haslo);
  38. powiadom_haslo($login, $haslo);
  39. ?>

Powiedz ewentualnie co nie dziala pisalem z palca moze sa jakies bledy ogolnie tez w CMS tak zrobilem zapomniane haslo ale uwierz mi to nie jest dobry sposob zabezpiecz to sobie bo mozna walki robic chyba ze sprawdzasz dane z form'a ale nigdzie tu tego nie widze

W kodzie miales cos takiego
  1. <?php
  2. echo $haslo;
  3. ?>

W 2 funkcjach z zmienna $haslo tworzysz w funkcji pobierz_losowe_haslo() i to nie mialo prawa dzialac bo po
1.to u ciebie ta funkcja nic nie zwraca
2.to nie echo() ale jak juz ta zmienna ma byc widoczna w inne funckji to
  1. <?php
  2. global $haslo;
  3. ?>

3.
  1. <?php
  2. sha1('$haslo')
  3. ?>

Zmienna to nie string i chyba tak sie jej nie przekazuje
Lejto
thx @marcio wszystko działa
marcio
hehe jednak na cos sie przydaje smile.gif jednak zabezpiecz to sobie zeby zmienialo haslo tylko jesli sie kliknie na link bo ktos komus zmieni i ta osoba nie wiedziac o tym pomysli ze byl hack tez to musialem zmieniac
Lejto
w mailu link tak?
podaj twój kod jak to masz zrobione winksmiley.jpg za każdym razem jest grawerowany nowy link czy po ip jak to działa?
marcio
Przy rejestracji generuje jakis kod kazdemu user'ow potem wysylam link z tym kodem i zakodowanym haslem bo tym jak ktos na niego kliknie haslo sie zmienia
  1. <?php
  2. if(!empty($_POST['log']) && !empty($_POST['email']) && isset($_POST['wyslij'])) {
  3.  
  4.  if($db = mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo'])) {
  5. mysql_select_db($pasy['baza']);
  6.  
  7.  $query = ('select * from users where login = "'.mysql_real_escape_string($_POST['log']).'"');
  8.  $result = mysql_query($query, $db);
  9.  $info = mysql_fetch_assoc($result);
  10.  $log = $_POST['log'];
  11.  $code = $info['code'];
  12.  $db_email = $info['email'];
  13.  $post_email = $_POST['email'];
  14.  $new_pass = substr(md5(rand(1, 99999)), 0,10);
  15.  $hash_haslo = md5($new_pass);
  16.  $tyt = 'Nowe haslo';
  17.  $smtp = 'smtp.szu.pl';
  18.  $port = 25;
  19.  $nick = 
  20.  $haslo = 
  21.  $from = 'marcio@szu.pl';
  22.  $headers = "MIME-Version: 1.0r\n";
  23.  $headers .= "Content-type: text/html; charset=iso-8859-2r\n";
  24.  $content = "Witaj ".$log." twoje haslo zostalo zmienione na takie: ".$new_pass."
  25.  Aby je aktywowac musisz kliknac na ten link:
  26. http://".$strona."?log=".$log."&code=".$code."&pass=".$hash_haslo."";
  27.  
  28. if($info['login'] == $log && $info['email'] == $email) {
  29.  
  30.  if(my_mail($smtp, $port, $nick, $haslo, $from, $db_email, $tyt, $content)) {
  31.  
  32. echo('<script>alert("Email z nowym haslem zostal wyslany na email podany przy rejestracji aby je
     zmienic prosze kliknac na link podany w tresc email'a");</script>'
    );
  33. }
  34. else echo('<table align="center"><tr><td class="contents" align="center"><b style="color:#f00">Blad przy wysylaniu email'a</b></td></tr></table>');
  35. }
  36. else echo('<table align="center"><tr><td class="contents" align="center"><b style="color:#f00">Dane nie sa poprawne</b></td></tr></table>');
  37. }
  38. else echo('<table align="center"><tr><td class="contents" align="center"><b style="color:#f00">Blad przy laczeniu z baza</b></td></tr></table>');
  39. }
  40.  
  41. if(isset($_GET['log']) && isset($_GET['code']) && isset($_GET['pass'])) {
  42.  
  43.  if($db = mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo'])) {
  44. mysql_select_db($pasy['baza']);
  45.  
  46.  if(mysql_query('update users set haslo = "'.mysql_real_escape_string($_GET['pass']).'" where login = "'.mysql_real_escape_string($_GET['log']).'" and code = "'.mysql_real_escape_string($_GET['code']).'"', $db)) {
  47.  
  48.  if(mysql_affected_rows() > 0) {
  49.  
  50. echo('<table align="center"><tr><td class="contents" align="center"><b style="color:#f00">Haslo zostalo zmienione teraz morzesz sie logowac</b></td></tr></table>');
  51.  
  52. }
  53.  
  54. else echo('<table align="center"><tr><td class="contents" align="center"><b style="color:#f00">Podano zly kod aktywacyjny</b></td></tr></table>');
  55. }
  56.  
  57. else echo('<table align="center"><tr><td class="contents" align="center"><b style="color:#f00">Nie mozna polaczyc z baza</b></td></tr></table>');
  58.  
  59. }
  60. ?>

Masz nie wiem czy nie brakuje jakiejs klamry skopiowalem na szybko

HEhe sorki za pasy smile.gif
Lejto
@marcio a kod code zmieniasz userowi np. przy zalogowaniu czy jest cały czas taki sam?
marcio
Ustawiam go raz przy rejestracji

P.S podsunoles mi teraz fajna idee zmieniac za kazdym logowaniem wtedy bedzie bardziej bezpieczne to smile.gif tylko nie bedzie dobrze dzialac zapomniane haslo bo co jesli ktos sie zaloguje a w email'u przyjdzie stary klucz smile.gif wiec raczej zmieniac nie bede
Lejto
a jak tworzysz ten kod? Bo ja przy użyciu md5
marcio
Tak jak ci tu napisalem
  1. <?php
  2. $nowe_haslo = substr(md5(time()), 0, $max);
  3. ?>

MNiej wiecej
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.