Questa raccomandazione non ha senso:
Il codice JavaScript utilizzato per hash o crittografare la password deve essere trasferito anche al client. Se l'attaccante è in grado di montare un attacco man-in-the-middle, sarà in grado di ispezionare anche il codice JavaScript utilizzato per la crittografia o potrebbe addirittura sostituirlo con qualcos'altro (come nessuna crittografia).
L'hashing invece della crittografia ha ancora meno senso, perché funziona solo se il server accetta la password con hash anziché la vera password. In questo caso l'hacker non ha nemmeno bisogno di conoscere la password, ha solo bisogno di conoscere l'hash.
Che cosa potrebbe essere d'aiuto sarebbe un certificato client perché non è possibile montare un attacco man-in-the-middle SSL che conserva il certificato client (e un downgrade a HTTP semplice non invierà nemmeno il certificato). Ma, dato che devi prima distribuire i certificati ai client e farli installare nel browser, questa soluzione funziona solo quando hai pochi client.
A parte questo: se l'attaccante è nel mezzo potrebbe non aver bisogno della password. Tutto ciò di cui ha bisogno è che la vittima abbia effettuato l'accesso e che l'aggressore possa prendere il controllo della sessione esistente.
Potrebbe anche essere utile rilevare una simile situazione man-in-the-middle, in modo da poter informare l'utente e negare il login da reti compromesse. Alcune idee per rilevare i downgrade della connessione (ovvero http all'attaccante che la inoltra come https):
- Verifica il metodo della posizione corrente con JavaScript.
- Crea un cookie sicuro con JavaScript. Dovrebbe essere rispedito solo se il sito è servito con https (che non è un downgrade).
- Includi uno script come HTTP che server un'immagine e controlla sul lato server come è stata inclusa l'immagine. Se è stato incluso come HTTPS, puoi assumere un attacco di downgrade HTTP perché lo hai incluso esplicitamente con HTTP. Se si accede con HTTP, si ha anche un attacco di downgrade (ma con un aggressore più intelligente) o il browser non si preoccupa dei contenuti misti.
E su come rilevare man-in-the-middle con i certificati falsi:
- Imposta un secondo sito https (con un nome host diverso) e costruisci una richiesta ajax su questo sito in un modo, che non è semplice per l'hacker di passare a http (ad esempio crea dinamicamente URL). Se l'autore dell'attacco tenta semplicemente di visitare qualsiasi sito MITM, questa richiesta di ajax avrà esito negativo almeno con alcuni browser, poiché il certificato non è attendibile e il browser chiederà all'utente solo i certificati primari di un sito.
Naturalmente tutto questo aiuta solo contro un attaccante che non è determinato a hackerare in particolare tu, ma prende solo gli obiettivi più facili. In questo caso, tutto ciò che devi fare è essere un po 'più difficile da attaccare rispetto al resto.