Ovviamente voglio che gli utenti della mia applicazione cambino le loro password su base semi-regolare (in effetti alcune delle nostre app devono essere approvate UL e richiedono un sistema per imporre la modifica delle password ogni 90 giorni). Il modo più semplice per farlo è quello di memorizzare l'ultima volta che l'utente ha cambiato la propria password nel proprio record. Sto anche implementando un flag che, se impostato, segna fondamentalmente la password come "temporanea", costringendo l'utente a cambiare la password al successivo accesso riuscito.
La domanda è semplice: la memorizzazione di questi dati in testo semplice (il flag e / o la data) espone una vulnerabilità?
Vedo un vettore di attacco principale ed è piuttosto serio; un utente malintenzionato che ha ottenuto diritti di modifica sulla tabella utente potrebbe modificare il campo data o il flag, costringendo l'utente a modificare la password a proprio piacimento, esponendolo eventualmente a un keylogger installato sul computer client. Ciò richiede più "ins", ma se entrano in un modo possono ottenere in altri modi. Le informazioni di sola lettura potrebbero comunque fornire un vettore simile identificando il prossimo utente che deve modificare la propria password, rendendole il prossimo obiettivo per sniffare la nuova password.
Ho già un sistema per la crittografia dei dati utente basata su password che nasconde altri dati sensibili nel sistema; La domanda (che potrei aver risposto io stesso) è se includere questi campi nel blob crittografato. Se lo faccio, obbliga legittimamente gli utenti a cambiare le loro password in modo più difficile (potrei voler forzare ogni utente a cambiare la password e altri dati da avviare, se dovessi scoprire che il DB era stato scaricato), ma anche impedisce a un utente malintenzionato di fare lo stesso.