Attualmente sto creando un servizio web al link simile a link che dovrebbe aiutare gli utenti ad ottenere il codice LaTeX dalle formule disegnate. Fa parte della mia tesi di laurea triennale e l'obiettivo principale di questo progetto è rendere più facile la ricerca nel campo del riconoscimento della grafia on-line. Ciò significa che voglio condividere tutti i dati che ottengo dagli utenti.
Il modo più semplice per farlo sarebbe semplicemente scaricare il database. In questo modo ho potuto fare la mia copia di backup e una discarica per i ricercatori in un solo passaggio.
Ci sono solo due pezzi in cui esisto a condividerlo con il pubblico non appena altri utenti usano il mio sistema: indirizzi e-mail e password.
password
La password è memorizzata in hash e salata (ciò significa che memorizzo md5($userpass.$salt)
e $salt
che è una stringa casuale di 8 caratteri con caratteri da A-Za-z0-9
- il sale è generato per ogni utente). È sufficiente per rendere pubblico questo?
La parte principale della domanda riguarda l'indirizzo e-mail: al momento, lo memorizzo come testo normale. Ma sto pensando di memorizzare solo un hash dell'indirizzo e-mail. Questo hash non può essere salato, perché la mia funzione di login funziona come segue:
L'utente inserisce $email
e $password
. Entrambi vengono inviati come testo normale al server. Quindi il server fa (come pseudocodice):
$pwdb, $salt = query(SELECT password, salt FROM users WHERE email = :email)
if (md5($password.$salt) == $pwdb) {
Logged in
} else {
Wrong password
}
Indirizzi email
Non importa se :email
è $email
o md5($email)
o md5($email.$applicationwide_random_str)
. Ma non posso fare un nuovo sal per ogni utente senza dover passare per ogni utente (il che probabilmente non sarebbe male se penso che non avrò mai più di 10.000 utenti).
Domande
- Quanto tempo ci vorrà per "disapprovare" una sola email (ad esempio
[email protected]
o[email protected]
) che ha un sale casuale di 8 caratteri (ad esempioFHCJ81ru
) con hardware "standard" (< $ 1000) quando non conosci la stringa casuale? È questione di secondi, minuti, ore o giorni? - È brutto se le persone possono farlo? Voglio dire che potrebbero anche semplicemente inviare e-mail e vedere cosa restituiscono. Nel mio servizio, non sono coinvolti molti dati personali:
- simboli e formule scritte a mano
- infine la mano
- alla fine quando / dove la persona ha imparato a scrivere
- alla fine la lingua dell'utente
- Perché nessun servizio ha cancellato l'indirizzo Email (ok, non so se non ci sono servizi che lo fanno, ma non l'ho mai letto - le password di hashing sono comuni, ma hashing gli indirizzi Email? Mai sentito.)
- È una buona idea cancellare le e-mail se si desidera utilizzare l'e-mail solo se l'utente ha perso la sua password e accedere? (Ho pensato di usare OpenID, ma la maggior parte delle persone non sa cosa sia)