L'applicazione Web su cui sto lavorando è protetta al 100% da SSL (o meglio da TLS come viene chiamato oggi ...). L'applicazione è stata recentemente verificata da una società di sicurezza. Sono per lo più d'accordo con i loro risultati, ma c'è stata una cosa che ha portato a grandi dibattiti:
Come parte del processo di modifica della password per gli utenti, l'utente deve fornire la vecchia password e quella nuova due volte, niente di insolito. Inoltre, la nuova password deve essere conforme a un criterio password (lunghezza minima, yadda yadda).
L'applicazione è realizzata con Vaadin che utilizza piccoli messaggi AJAX per aggiornare l'interfaccia utente. Tutta la logica dell'applicazione vive sul server. Ciò significa che tutta la convalida del modulo di modifica della password avviene sul server. Per convalidare il modulo, sia la vecchia password che le due nuove password (che dovrebbero corrispondere ovviamente) devono essere inviate al server. Se c'è qualcosa di sbagliato (la vecchia password è sbagliata, le nuove password non corrispondono, la nuova password non è conforme alla politica della password), l'utente riceve un errore. Sfortunatamente come parte del processo di sincronizzazione, Vaadin invia di nuovo tutti i dati del modulo al client, incluse le vecchie e le nuove password.
Dato che tutto ciò accade su SSL non ci ho mai pensato due volte ma la società di sicurezza ha considerato questo come un rischio per la sicurezza della massima severità. Si noti che il problema agli occhi della società di sicurezza non era che i dati sono stati inviati al server ma che il server ha incluso i dati nella sua risposta in caso di convalida non riuscita . Quindi la nostra soluzione attuale è di svuotare tutti i campi se la validazione fallisce. Ciò porta a una scarsa esperienza utente in quanto l'utente deve compilare più volte tre campi di testo se, ad esempio, le password ripetutamente non corrispondono alla politica della password.
Sono ingenuo nel pensare che questo sia davvero esagerato? Voglio dire, se un utente malintenzionato interrompe la crittografia, ha comunque accesso all'intero traffico.
modifica : per quanto riguarda la navigazione a spalla, voglio chiarire che nessuna password viene mai restituita all'utente . Tutti i campi di input sono campi password appropriati che mostrano solo segnaposto ma nessun carattere effettivo.