Informazioni di contatto presenti
Hai la loro e-mail o il numero di telefono nel tuo database?
In tal caso, invia qualsiasi informazione a tali dati di contatto e visualizza solo un messaggio generico "grazie, se sei registrato con noi riceverai una conferma per i tuoi dati di contatto registrati" sul sito web. Questo messaggio è sempre lo stesso, indipendentemente dal fatto che l'utente si trovi nel DB o meno.
In effetti, per contrastare gli attacchi temporali dovresti visualizzare il messaggio e uscire, e fare la ricerca e l'invio di posta o SMS in un processo batch in background.
La limitazione della velocità, ecc. è già stata citata, sicuramente raccomandata.
Nessuna informazione di contatto
Se ho capito bene, hai anche utenti senza eventuali informazioni di contatto. Questi ragazzi sono difficili. Il problema è che nome e DOB non sono informazioni segrete in alcun modo. Per la maggior parte delle persone, occorrono pochi minuti per trovarli, e qualsiasi hacker esperto può probabilmente trovarli entro un'ora per il 99% delle persone.
Hai bisogno di almeno alcune informazioni aggiuntive che sono più difficili da scoprire e che possono funzionare come un segreto condiviso . Questo è il ragionamento dietro le varie "madri da nubile nome" o "nome del tuo primo animale domestico", le cosiddette domande di sicurezza.
Se non hai altro, non c'è un modo sicuro per controllare. In questo caso devi far sì che quegli utenti si identifichino in un modo fidato, ad es. andando in un luogo fisico e mostrando il passaporto, o mostrando il passaporto su una webcam o un passo simile, a seconda della sensibilità dei dati.
Questo è un problema fondamentale che non puoi risolvere con la tecnologia o la matematica, perché semplicemente non ci sono abbastanza informazioni non pubbliche presenti.
Quindi controlla se uno qualsiasi degli altri campi memorizzati in quel DB può essere usato come informazione identificativa.