Bezpečnou autentizaci odolnou i proti odpoleschnutí je například tento způsob:
1) V DB máme samozřejmě jen jednosměrný hash hesla, nejlépe s nějakým saltem - například login
2) Spolu s přihlašovacím formulářem odešleme uživateli nějaký další salt, který si uložíme do session, nebo db
3) Při odeslání formuláře se spustí javascript, který z hesla/loginu vypočítá hash, který se rovná hashy, který máme v db.
- Tím však tento hash má stejnou váhu jako heslo a nemůžeme jej tedy odeslat zas na server, protože by ho mohl někdo odpoleschnout. Proto zde nastupuje salt odeslaný s přihlašovacím formulářem. U něj je vyžadována náhoda, musí mít nastavenou trvnalivost a musí být někde poznamenán na straně serveru. Pomocí hashe spočítaného u klienta a toho saltu vypočítáme nová hash, který až odešleme.
- Na straně serveru veme hash hesla v db, přidáme salt, vypočítáme hash a porovnáme, zda se rovná se zaslaným uživatelem. A zablokujeme salt, aby útočník v případě odposlechu jej nemohl znovu použít.
Při další práci po autentizaci bude probíhat ověření zřejmě pomocí session, kterou je potřeba také ochránit proti odposlechu - ideální při každém requestu přegenerovat, čímž útočníkovi stížíš získání tvé session. Tu samozřejmě na straně sw nabindovat nejlépe na konkrétní ip, prohlížeč a pod..
https je protokol http šifrovaný za použití ssl a je tedy teoreticky odolný proti odposlechu. Další možností je využití třeba ssh tunelu, nebo vpnky.