Recentemente abbiamo eseguito una revisione della sicurezza esterna su un sito web pubblico che gestiamo. Hanno notato che nella "pagina di recupero della password" ci sono diversi tempi di risposta quando si forniscono nomi utente esistenti e non esistenti. Affermano che questo potrebbe rendere più facile per un utente malintenzionato verificare i nomi utente esistenti. La modifica suggerita per eliminare questo vettore di attacco è quella di eseguire sempre la stessa logica per ogni tentativo di recupero della password.
Nel nostro caso, la logica di recupero della password consiste (approssimativamente) nei seguenti passaggi:
- Carica l'utente dal database.
- Invia un'email all'utente con un link per la reimpostazione della password.
Se l'utente esiste, vengono eseguiti entrambi i passaggi. Se l'utente non esiste, viene eseguito solo il passaggio 1.
In termini di ricerche nel database, ecc., questo è facilmente risolvibile. Ma quando si tratta di interagire con sistemi esterni, in questo caso l'invio di una e-mail, è meno banale.
Supponevo che introdurre un ritardo casuale non sarebbe di grande aiuto, poiché probabilmente ci sarebbe ancora una differenza rilevabile nelle distribuzioni dei tempi di risposta.
Un'altra idea è quella di creare un account e-mail da qualche parte e inviare lì un messaggio di posta elettronica per ogni nome utente non esistente.
Quale sarebbe la migliore pratica in questa situazione?