Autor Zpráva
xmas
Profil *
Dobrý den,

náhodou jsem narazil na tenhle článek:

[url=http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&top ic=53097][/url]

a pokusil jsem se udělal podle Alphard, který navrhoval odeslání dvou emailů při změně hesla. Dostal jsem se, když se uživateli odešle email, chtěl bych, aby odkaz byl platný 24h.

Pro ty co nechtějí číst předchozí odkaz:

Posílám přes email odkaz a chci, aby ten odkaz byl aktivní 24h, tedy, pokud na něj uživatel klikne po 24h jakákoliv akce, která by měla nastat nenastane. Jak to udělat? Děkuju předem za rady
NetHill
Profil
Ten tvůj odkaz:
Téma neexistuje. Buď bylo vymazáno administrátorem nebo vůbec neexistovalo.
Návrat zpět
nightfish
Profil
NetHill
ale existuje

xmas
uděláš to třeba tak, že si do databáze uložíš kód, který je v odkazu, který jsi poslal mailem
a k němu buď datum odeslání nebo datum platnosti
a pak když někdo klikne na odkaz na změnu hesla, tak se v db zkontroluje, jestli už vypršela doba, po kterou měl být dotaz aktivní...
xmas
Profil *
tím kódem myslíš co?

podle toho co píšeš:

$extime = $time + 60x60x24;

odkaz by pak vypadal takhle: http://www.example.com/?login=xmas&extime=$extime

a pak kontrolovat podle db

ale jak zabránit člověku, který se dovtípí, aha, tak extime je unixovej timestamp tak si "udělám" unixovej timestamp, který bude odpovídat a změním stejně si heslo?
BetaCam
Profil
xmas

Pochopil si to špatně nightfish zdřejmě myslel, že v DB budeš mít uložení nejaký unikátní klíč a čas expirace. Tedy něco jako :

key : 68as4g616fj4d684hn6d1fb6s8fzj76g4
endtime : čas kdy odkaz vyprší

odkaz bude vypadat :

http://www.example.com/?login=xmas&key=68as4g616fj4d684hn6d1fb6s8fzj76 g4

no a na té stránce vlezeš do databáze pokud bude now() menší než endtime změníš heslo a pokud nebude tak heslo nezměníš.
xmas
Profil *
chápu, perfektní, děkuju
xmas
Profil *
doufám, že nebude vadit, když obnovím tohle vlákno, ale dostal jsem se k tomu až teď a chtěl bych se ještě zeptat jestli stačí "key" ,který tedy budu brát pomocí get, projet funkcí preg_replace..tedy takto:


$key = $_GET['key'];
$tkey = preg_replace('/([^A-Za-z0-9]+)/','', $changecode);


a pak už fungovat z databází, abych zabránil sql injection?
BetaCam
Profil
Hodnotu key by si měl ošetřit stejně jako všechny vstupy od uživatele. Jak to uděláš už je na tobě :)
xmas
Profil *
Jak to uděláš už je na tobě :)

já vím, proto se ptám, jestli tohle je dostačující?:-)
BetaCam
Profil
Čistě teoreticky : Ano.
xmas
Profil *
jak by si to řešil ty?
BetaCam
Profil
No já bych to řešil cestou na kterou sem zvyklej a kterou běžně používám.

1. všechny data od uživatele slashuju
2. kontroluju URI na zakázané znaky. Pokud se tam vyskytne znak kterej je zakázanej okamžitě přichází na řadu exit()

ale to je jen moje síla zvyku. Ty by si měl vědět jakym způsobem ošetřuješ data od uživatele :)
xmas
Profil *
já vím jak to dělám, ale to neznamená, že je to bezpečný:-) díky
BetaCam
Profil
No bezpečný neni v dnešní době ani se nadechovat a vydechovat :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0