Passa l'hash
Se si hash la password sul client, si corre il rischio di introdurre un difetto pass-the-hash (PTH). Questo è un fenomeno reale, sorprendentemente comune che influisce in modo significativo sulla sicurezza della tua applicazione. È stato un problema di sicurezza chiave in Windows per anni: link
(EDIT: l'esempio di Windows sopra illustra i punti deboli del protocollo challenge-response NTLM. Un protocollo challenge-response ben progettato non dovrebbe essere vulnerabile al PTH, sebbene questi protocolli siano stati in gran parte superati dalla sicurezza del livello di trasporto. .)
In sostanza, se si hash prima la password, il valore che si sta utilizzando per autenticare contro il server è in realtà un hash di tale password e non la stessa password. Pertanto, un utente malintenzionato ha solo bisogno di conoscere tecnicamente l'hash e non la password stessa. Di conseguenza, se il database fosse stato compromesso, ora sei fuori combattimento, perché l'utente malintenzionato ha tutte le credenziali di cui ha bisogno.
Soluzione
È possibile potrebbe aggirare questo problema tramite l'hashing sul client e l'hashing di nuovo hash sul server. Ciò significa che il database conterrà un elenco di hash che devono ancora essere decifrati prima che siano utili.
Tuttavia, ciò non aiuta in particolare il tuo problema di sicurezza dei trasporti. Qualsiasi valore inviato al server durante l'autenticazione (la password o solo un hash) è il valore che un utente malintenzionato può utilizzare per l'autenticazione con il server. Pertanto, un hash lato client ha sempre lo stesso profilo di rischio della password stessa. Non sei più sicuro trasferendolo come hash.
TLS
Di conseguenza, è meglio concentrare l'attenzione su una buona configurazione TLS. Assicurarsi che il client non invii mai informazioni sensibili su un protocollo Cleartext e che accetti solo certificati server validi. Prendi in considerazione il blocco dei certificati, se disponibile. Configura il supporto solo per i protocolli e le suite di crittografia più sicuri sia sul server che sul client.
Alternate metodi di autenticazione (tutti potenzialmente potenzialmente invulnerabili al pass-the-hash se implementati correttamente):
Tali protocolli sono in gran parte non necessari nelle moderne applicazioni a causa della maggiore disponibilità e interoperabilità di TLS.