Autor | Zpráva | ||
---|---|---|---|
GeneralDv Profil |
#1 · Zasláno: 2. 9. 2009, 17:58:45 · Upravil/a: GeneralDv
Zdravím a to zase s dalším problémem :-( při přihlašování nebo registraci mi de/kódování šifry md5 problémy nedělá a tenhle to mam 'stejný', nechápu proč mi to posílá úplnej nesmysl ,,, script má odesílat email se zapomenutym heslem..
<?php if (isset($_SESSION["prihlasen"]) and @$_SESSION["prihlasen"]==1){ exit; } $zobr = true; if (isset($_POST["email"]) or trim($_POST["email"])!=""){ $_POST["email"] = trim(mysql_real_escape_string($_POST["email"])); $sql = "select email,heslo from uzivatele where email='".$_POST["email"]."'"; $vysledek = mysql_num_rows(mysql_query($sql)); if ($vysledek!=1){ echo('<div class="red-alert">Tento email není v naší databázi !</div>'); }else{ $vyber = mysql_fetch_array(mysql_query($sql)); $heslo = md5($vyber["heslo"]); $headers = "Content-Type: text/html; charset=utf-8\n"; $headers .= "From: ".$nastaveni["email"]."\r\n"; $zprava = 'Pravděpodobně Vy jste si vyžádal(a) odeslání zapomenutého hesla na email, pokud se tak nestalo, zprávu ignorujte.<br><br><br><strong>Heslo: </strong>'.$heslo.'<br><br><br>Portál „XXX" - <a href="http://XXX/">X</a>'; $odeslat = mail($vyber["email"],"Zapomenuté heslo",$zprava,$headers); if ($odeslat==true){ echo('<div class="green-alert">Email s heslem byl úspěšně odeslán !</div>'); $zobr = false; }else{ echo('<div class="red-alert">Email s heslem se nepodařilo odeslat, prosím opakujte !</div>'); } } } if ($zobr==true){ echo(' <form action="" method="post"> Email: <input type="text" name="email" value="" size="28"> <input type="submit" value="Odeslat heslo"> </form> '); } ?> |
||
tiso Profil |
#2 · Zasláno: 2. 9. 2009, 18:17:23
GeneralDv: na mail si posielaš md5 hash hesla, ktoré máš uložené v databáze.
|
||
jso Profil * |
#3 · Zasláno: 2. 9. 2009, 18:29:50
GeneralDv
ano, jak říká tiso. Standardně se to řeší vytvořením náhodně vygenerovaného hesla (hash se opět uloží do db) a uživateli na mail se pošle heslo před hashem. |
||
GeneralDv Profil |
#4 · Zasláno: 2. 9. 2009, 18:39:16 · Upravil/a: GeneralDv
Nějak sem to nepochopil... Nevíte teda proč mi to
$heslo = md5($vyber["heslo"]); |
||
MCKAY Profil |
#5 · Zasláno: 2. 9. 2009, 18:46:49
Mám takový dojem že hash se pomocí funkce md5 nevrátí do původní podoby nebo ano? V tom bude asi chyba
|
||
GeneralDv Profil |
#6 · Zasláno: 2. 9. 2009, 19:26:13 · Upravil/a: GeneralDv
„Mám takový dojem že hash se pomocí funkce md5 nevrátí do původní podoby nebo ano? V tom bude asi chyba“
V tom případě nechápu jaktože vůbec funguje přihlášení a to je stejný.. :O |
||
jso Profil * |
#7 · Zasláno: 2. 9. 2009, 19:32:43
GeneralDv
md5 je jednocestná funkce. Takže v reálném čase nelze zjistit původní hodnotu či pravděpodobnost, že jiné heslo zajistí stejný hash je velmi malá. Ověřování se dělá tak, že v db je hash hesla. Uživatel zadá své heslo, které se zahashuje a tyto hashe se porovnají. Rovnají-li se, pak je uživatel přihlášen. |
||
pl Profil * |
#8 · Zasláno: 2. 9. 2009, 19:34:58
GeneralDv
je to jednoduche pri prihlaseni se neporovnava heslo ale jeho hash. napises do formulare normalne heslo, formular odesles pak php zeni textovou podobu hesla na hash a ten porovna s hashem ulozenym v databazi. stim je spojeny tvuj problem...z hashe normalnim zpusobem zpet heslo jiz nedostanes. proto ho take nikomu nemuzes poslat. resi se to tak jak ti psali nahore....vygenerujes nove heslo posles ho na mail a do databaze ulozis jeho hash. |
||
Werewolf Profil |
#9 · Zasláno: 2. 9. 2009, 19:42:30
GeneralDv:
Vyřešíš to tak, že při odesílání zapomenutého hesla vygeneruješ nové místo zjištění starého. |
||
drasha Profil |
#10 · Zasláno: 2. 9. 2009, 20:30:16 · Upravil/a: drasha
„Vyřešíš to tak, že při odesílání zapomenutého hesla vygeneruješ nové místo zjištění starého.“
Tohle se tady neřeší :) //registrace - ukladani hesla do DB $pw = sha1( $pw ); // md5( $pw ) chces-li query(); //prihlasovani $uzivatel = query(" 'SELECT * FROM uzivatele WHERE jmeno='$jmeno' ")->fetch(); $pw = sha1( $pw ); // zahasujes heslo if( IsSet( $uzivatel ) ){ // zkontrolujes, jestli je hash stejny jako hash co mas v DB if( $uzivatel['heslo'] == '$pw' ){ ... }else echo 'heslo neni spravne'; }else echo 'uzivatel neexistuje'; A kdyz uz heslo jednou zahasujes, je temer nemozne ho rozhasovat(jinak by to nebyl hash ze :)) $pw = md5( $heslo ); $heslo != md5( $pw ); |
||
jso Profil * |
#11 · Zasláno: 2. 9. 2009, 20:32:42
drasha
„„Vyřešíš to tak, že při odesílání zapomenutého hesla vygeneruješ nové místo zjištění starého.“ Tohle se tady neřeší :) “ řeší neřeší. Dotaz zněl na registraci, přihlašování a posílání e-mailu o obnově hesla. |
||
GeneralDv Profil |
#12 · Zasláno: 2. 9. 2009, 21:13:34 · Upravil/a: GeneralDv
Díky za odpovědi. drasha nepochopil sem :D ale teď už je problém vyřešenej, jak ste psali abych udělal generování new hesel - už sem to udělal ...
|
||
Časová prodleva: 15 let
|
0