Portál AbcLinuxu, 31. října 2025 00:35
Tuhle otázku musí řešit čas od času každý tvůrce webu. Kromě hotových řešení vestavěných do CMS nebo lahůdek typu OpenID, Kerberos či LDAP, se můžeme rozhodnout i pro svoji vlastní implementaci. Uživatelská jména a (hlavně) hesla jsou citlivá věc, a proto se budeme zabývat v první řadě bezpečností.
Na co si dát pozor:
Napsal jsem aplikaci, která se jmenuje BG a je to (velmi) jednoduchý systém na správu chyb/požadavků (něco jako Bugzilla, ale mnohem jednodušší).
Tato aplikace používá pro autentizaci uživatelů metodu výzva-odpověď. Pro praxi je nepoužitelná (skoro nic neumí), ale poslouží jako dobrý příklad této autentizační metody. Vydal jsem ji pod GPL, tak se můžete inspirovat, případně využít i nějakou část kódu.
BG je napsaná v PHP a na straně klienta používá JavaScript (pro počítání hashů). Podrobnější popis a odkaz ke stažení najdete na mých stránkách Frantovo.cz.
Tiskni
Sdílej:
Kéž by google začal poskytovat openID
třeba by to pomohlo rozšíření jednotného přihlašování.
Problém téhle první verze je v tom, že uspokojivě funguje pouze ve FF. Stránka je validní a i ta knihovna pro výpočet hashe by měla chodit ve více prohlížečích, ale z nějakého zatím neznámého důvodu se mi to jinde rozchodit nepodařilo. Tipuji, že chyba bude někde v okamžiku, kdy chci pomocí JS nastavit vypočítaný hash zpátky do formulářového pole a odeslat.
Jak moc silná podmínka to je, se dá diskutovat, pokud by to bylo funkční v aktuálních verzích FF, IE, Opery a Konqueroru, tak bych to považoval za použitelné pro praxi, bez ohledu na to, že je tam nějaký JS.
a ten uživatel, pod kterým to běží, taky nemůže prakticky nic (hlavně nemá přístup k souborům ostatních uživatelů).
Ale teď vážně, zajímalo by mě, kolik lidí tady na abc má vyplý javascript ? Třeba já osobně teď dělám jeden ajaxově založený web a prostě už nepočítám s tím, že by někdo javascript neměl.
problém je v předpokladu, že k dané e-mailové zprávě se nedostane nikdo jiný, než oprávněný uživatel.Což ale použití kódu pro změnu hesla neřeší. Vzhledem k tomu, že nemáte jinou možnost, jak s dotyčným komunikovat, není ani jiná možnost, jak zapomenuté heslo řešit. Tedy pokud ho nechcete nutit, aby se k vám dostavil osobně s občankou.
Pro přihlašování bych certifikát nepoužíval, protože bych ho musel pořád nosit s sebou, ale jako prostředek pro obnovu zapomenutých hesel bych ho uvítal. IMHO by bylo fajn, kdyby si uživatel mohl do profilu zadat svůj veřejný klíč - nemusel by se s ním přihlašovat a měl by ho jen někde bezpečně uložený a v případě potřeby by ho použil pro obnovu hesla.
Podívejte, měl jsem za to, že to funguje takto:
- na serveru je heslo v textové podobě
- pokud se chce klient přihlásit, vygeneruje se náhodná sůl, která se pošle klientovi
- klient vypočítá hash hesla se solí a pošle na server, který vše ověří
takto by to podle mě šlo, ale už tady vidím problém, že se musí poslat i sůl, a pokud si někdo odchytí ten hash i sůl tak vlastně vyhrál:)
Už nemusíte reagovat, já si to pořádně pročtu ještě jednou, protože mi pořád něco uniká, jinak díky:)
To riziko je tak malé a ve svých důsledcích nepříliš významné, že se s ním můžeme v klidu smířit, ale přesto je dobré o něm vědět.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.