Autor Zpráva
Martin Brodecký
Profil
Ahoj všem,
zajímalo by mě několik věcí a hodnocení z hlediska bezpečnosti. V současné době na mém portálu funguje obnovení hesla pro uživatele následujícím způsobem:

1. Tlačítko "Zapomenuté heslo" vede na formulář, kde uživatel zadá svůj e-mail, kterým se přihlašuje.
2. Při potvrzení se ověří existence zadaného e-mailu z databáze z tabulky uživatelů. Pokud e-mail existuje, vygeneruje se náhodný token, ten se zapíše do databáze a zároveň se zapíše do proměnné fp_id, která se následně použije v URL adrese zaslané na daný e-mail např. www.xy.cz/ressetpass.php?fp_id=13sd54f3sd21f5. Hodnota tokenu zůstává v databázi 30 minut. Není pod žádným hashem - je to problém? Pokud ano, proč? Když se někdo dostane do databáze, beztak už může cokoli.. Vstupy od uživatelů do formulářů jsou zabezpečeny přes php statements..
3. Uživateli přijde e-mail s informací, že bylo zažádáno o obnovení hesla. Pokud klikne v e-mailu na tlačítko "Obnovit heslo", aktivuje se odkaz s hodnotou fp_id=token a následně je tato hodnota tokenu ověřena proti hodnotě tokenu v databázi.. Pokud se shodují, je klientovi nabídnut formulář pro nové zadání hesla. Pokud ne, je zobrazena hláška o neoprávněné změně hesla.

Zajímalo by mě:
1. Je tato konstrukce z hlediska bezpečnosti v pořádku?
2. Jak se řeší v případě uživatelů, kteří se přihlašují přes Facebook?

Děkuji.
Jan Tvrdík
Profil
Martin Brodecký:
Není pod žádným hashem - je to problém?
Ano, tokeny pro reset hesla by měly být chráněny stejně jako hesla samotná.

Když se někdo dostane do databáze, beztak už může cokoli
Na beztak se v bezpečnosti nehraje. Pokud někdo ukradne databázi, tak by pořád neměl být schopen se za nějakého uživatele přihlásit. Omezení platnosti tokenu na 30 minut zneužití stěžuje, ale neznemožnuje.

Jak se řeší v případě uživatelů, kteří se přihlašují přes Facebook?
Většinou nijak. Pokud zapomenou heslo k FB, tak použíjí reset hesla na Facebooku.
Martin Brodecký
Profil
Jan Tvrdík:
Díky za rychlou odpověď, hash doprogramuji, to je otázka chvilky...

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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