Autor | Zpráva | ||
---|---|---|---|
slovakCZ Profil |
#1 · Zasláno: 25. 1. 2010, 19:24:51 · Upravil/a: slovakCZ
Dobrý den,
mam nasledujici situaci: uzivatel se mi zaregistruje, do db se ulozi nick, heslo, cas_registrace, active(to je bud true nebo false.. udava to, zda je uzivatel aktivovan nebo ne) a cas registrace. Na mail uzivatele prijde email s potvrzovacim odkazem ktery je v tomto formatu: http://mujweb.cz/aktivujucet.php?hash=1ba29d8583671d48f2cd6fec637af916 kde prave "1ba29d8583671d48f2cd6fec637af916" = md5(cas_registrace). jde mi o to, zda je mozne z databaze tahat data nejak takto (tato moznost mi samozrejme nefunguje): $hash = $_GET['hash']; mysql_query("SELECT * FROM users WHERE md5(cas) = $hash"); nechci do db zbytecne ukladat tento cas ve formatu "md5", protoze ho vyuziji jen jednou... je sice moznost do url adresy dat dalsi parametr ID a pote tahat data z databaze podle daneho ID a az pote porovnavat zda se md5(cas) = $hash, ale zde se mi zase nelibi, ze pracuji s ID uzivatele.. byl bych radsi, kdyby to zustalo jen takto jak to je... ptam se tedy, zda je mozne udelat vyber jak jsem jej nastinil vyse? Dekuji za odpoved. Tom |
||
slovakCZ Profil |
#2 · Zasláno: 25. 1. 2010, 19:31:52
i kdyz ted me tak napada, kdyz pote administrator zdeaktivuje uzivatele (nastavi tedy ve sloupci active hodnotu false) a uzivatele pote napadne, ze se muze vlastne aktivovat tim, ze klikne opet na link v emailu tak toto asi neni vhodne reseni...
mozna by bylo vhodne to resit tak, ze si udelam zvlast sloupec napriklad s nazvem aktivacni_md5, do ktereho ulozim prave md5(cas_registrace). Kdyz uzivatel klikne na odkaz v emailu, tak se vybere dany uzivatel z db, kde prave GET[hash] = md5(cas_registrace) z databaze, nastavi se ve sloupci active hodnota true a pote se obsah sloupce aktivacni_md5 pro daneho uzivatele vymaze (nebo zmeni na "registrovan"). Tim padem kdyby ho administrator v budoucnu deaktivoval a uzivatel klikl na odkaz v emailu tak uz nebude mit moznost si ucet aktivovat. Uvaha by mela byt spravna... zeptam se tedy jinak :o) Jak toto resite vy? tak jak jsem to nastinil nyni? nebo je jeste nejaky jiny, uspornejsi a praktictejsi zpusob "aktivace uzivatelu pres odkaz v emailu"? Dekuji za diskuzi a za nazory, Tom |
||
Alphard Profil |
#3 · Zasláno: 25. 1. 2010, 19:36:16 · Upravil/a: Alphard
Ten dotaz je správný (teda chybí select, ale to je asi překlep) a $hash musí jít do apostrofů (je to řetězec), takže '$hash'. Jen si nejsem jistý, jestli lze časový datový typ dosadit do md5(), asi by to ale mělo jít. Co znamená nefunguje?
Stejně bych ale přenášel i id uživatele, čas nemusí být unikátní, jistota je jistota. A bude to rychlejší. [#2] Nenechával bych nějaké dlouhé lhůty, do e-mailu připsat, že na potvrzení registrace má 3 dny a hotovo. |
||
slovakCZ Profil |
#4 · Zasláno: 25. 1. 2010, 20:14:55
s tim T u selecT to byl preklep.. apostrofy take chybi, psal jsem to v rychlosti (melo jit jen o predstavu), v kodu to ovsem mam.
konkretne muj dotaz vypada takto: $query = mysql_query("SELECT * FROM `$table` WHERE `md5(cas)`='$GetHash'") or die("MySQL ERROR: ".mysql_error()); a pise to chybu: MySQL ERROR: Unknown column 'md5(cas)' in 'where clause' ale uz jsem na to prisel, problem byl v tom ze mam pouzito: ...WHERE `md5(cas)`... nesmim pouzit uvozovky.. kdyz je nepouziji tak vse funguje jak ma... s tim ID to asi bude pravda, preci jen, nahoda je blbec a i presto, ze ocekavam max. 10 registraci denne tak je mozne ze se 2 uzivatele registruji presne ve stejnou sekundu.. :o) diky za info, s temi 3mi dny taky dobra poznamka, ktere jiste vyuziji, asi jsem nejaky pretazeny, ze me takove veci nenapadaji :o) |
||
Alphard Profil |
#5 · Zasláno: 25. 1. 2010, 20:38:59
slovakCZ:
„nesmim pouzit uvozovky.. kdyz je nepouziji tak vse funguje jak ma“ Víte kolik lidí se marně snažilo najít chybu ve vašem dotazu jenom proto, že jste to psal v rychlosti a neodpovídalo to skutečnosti? Až budete příště pokládat dotaz, věnujte mu prosím víc pozornosti. |
||
AM_ Profil |
#6 · Zasláno: 25. 1. 2010, 20:45:53
slovakCZ:
„MySQL ERROR: Unknown column 'md5(cas)' in 'where clause'“ md5(cas) není název sloupce, takže to nemůžeš cpát mezi ``. Co se týče problému: - čas je málo silné kritérium; pokud uživatel bude znát ověřovací algoritmus a bude se chtít registrovat s falešným mailem, je dost pravděpodobné, že během pár pokusů se trefí. Udělal bych v databázi sloupec "activation_code", který bude po registraci obsahovat jakýkoli dostatečně dlouhý a náhodný údaj (např. md5(time()*rand()) Tento údaj se zároveň uživateli pošle na mail (v podobě activate.php?id=id_uctu&code=...). Kliknutím na tento odkaz: - se uživatel nastaví jako aktivní - se sloupec activation_code u daného uživatele vyprázdní, není možné tedy reaktivovat ručně zablokovaný účet. Otázka ale je, zda je vůbec nutné zavádět ověření e-mailu; pokud někdo nechce uvést svůj mail, použije třeba <cokoliv>@spam.la (pro pochopení se nejlépe podívat na http://spam.la ). |
||
Časová prodleva: 14 let
|
0