L'utilizzo del GUID come identificativo univoco per l'utente anziché l'indirizzo e-mail ha vantaggi contro gli aggressori a bassa potenza . L'URL-con-GUID è stato inviato tramite e-mail, quindi non può essere considerato veramente segreto. Gli aggressori motivati sputeranno le linee di rete e vedranno quell'e-mail. Tuttavia, i dilettanti oi robot di attacco automatici, pur non essendo in grado di leggere le email di altre persone, possono "indovinare" gli indirizzi email, ma non il GUID casuale.
Il GUID ha quindi qualche relazione con la sicurezza solo nella misura in cui è imprevedibile, e quindi porterebbe qualcosa di buono solo contro gli attaccanti che non sono molto potenti. L'uso del GUID non danneggia , ma non credo che in realtà aggiunga molta protezione. Potresti voler assicurarti che il GUID sia generato con l'algoritmo versione 4 , cioè 122 bit da un PRNG strong: sebbene il GUID miri a unicità , tu vuoi imprevedibilità , che è un'altra bestia; la versione 4 GUID garantisce entrambi.
Tenendo presente che il GUID non è (davvero) segreto, il sistema può essere descritto come tale: esiste una password di registrazione una tantum, che è un PIN di quattro cifre. Dopo la registrazione, viene utilizzata una normale password scelta dall'utente.
Il problema principale è che il PIN a quattro cifre è troppo facile da indovinare: un utente malintenzionato ha in media solo 5.000 tentativi prima di colpire quello giusto. È possibile attenuare questo problema disattivando il codice PIN dopo, ad esempio, tre tentativi errati per un determinato GUID; questo è il modello delle smart card , con il tuo server come la carta. Tuttavia, questo ostacolerà solo gli attaccanti che fanno una forza bruta online .
Sfortunatamente, occasionalmente, alcuni utenti malintenzionati possono dare un'occhiata ad alcune parti del database del server. Questo è un risultato frequente degli attacchi di SQL injection, ad esempio. I vecchi hard disk scartati sono anche una classica fonte di tali perdite. Questo è il motivo per cui prevedi di non memorizzare password di codici PIN, ma solo versioni con hash di questi.
Ma hashing delle password, anche se eseguito correttamente , solo rallenta gli attaccanti. Se il conteggio dell'iterazione è impostato in modo tale da richiedere un intero dieci secondi di calcolo per il server per verificare un codice PIN (e dieci secondi sono un tempo molto lungo per un cliente in attesa), e l'utente malintenzionato "solo" bisogno di 50000 secondi di calcolo, con lo stesso hardware, per "provare" 5000 possibili codici PIN. Dato che l'hacker introdurrà un paio di PC multi-core, probabilmente si spegnerà entro un'ora o due. Non è molto.
Suggerisco di utilizzare un codice PIN più lungo, ad esempio 8 cifre.
Per riassumere: il tuo GUID non è "abbastanza segreto" da tollerare un PIN di quattro cifre, anche per una pagina di registrazione una tantum. Usare un GUID invece dell'indirizzo email è interessante e vuoi che sia il più discreto possibile (quindi usa GUID "v4"), ma anche così, quattro cifre non sono sufficienti per un PIN quando il il sistema di verifica non è una smart card resistente alla manomissione. Utilizzare otto cifre (o più). Poiché l'utente digiterà il codice PIN una sola volta, può tollerare una sequenza piuttosto lunga (Microsoft potrebbe far digitare agli utenti le chiavi di attivazione di 25 lettere, quindi non penso che 8 cifre per la registrazione siano troppo chiedere).