Che, fondamentalmente, hanno alcune opzioni:
1) Creare un unico identificatore unico che è apparentemente casuale e memorizzarlo nel database con il quale nome utente corrisponde al
2) generare una password casuale e comprendono l'ID utente e la password nel collegamento e memorizzare la password nel database
3) Utilizzare una funzione di hashing unidirezionale (md5, sah1, ecc.) e un identificatore segreto per crittografare l'identificativo utente. Non è necessario memorizzare l'identificatore utente crittografato nel database.
L'opzione 1 è difficile perché è necessario controllare il database per verificare se la chiave esiste già. Tuttavia, è bello che l'URL non contenga il nome utente attivato.
Se si sta già utilizzando una sorta di database per memorizzare le informazioni dell'utente (probabilmente una password al minimo) in futuro, si potrebbe andare con l'opzione 2. Non ci vuole molto per aggiungere un'altra colonna a il tuo database Quando invii l'email, salva il nome utente e qualcosa come $ key = sha1 (rand (1, 99999). $ Username) in un'altra colonna per la riga che contiene il nome utente. Quindi il tuo link ha il seguente aspetto: http://you.com/activation.php?user= $ username & key = $ key. In activation.php si controlla se la chiave è uguale al valore memorizzato nel database.
Se si desidera utilizzare meno spazio di archiviazione nel database, l'opzione 3 funzionerà. Puoi usare qualcosa come $ key = sha1 ($ mysecret. $ Username) come identificatore segreto. Usa qualcosa di strano che conosci solo come $ mysecret come 'aaafj_my_secret_adfaf'. Utilizza lo stesso tipo di URL dell'opzione 2.Tuttavia, poiché è possibile generare una chiave $ basata solo su $ username, non è necessario memorizzarla. Quindi quando stai elaborando in activation.php, controlla se sha1 ($ mysecret. $ _GET [username]) == $ _GET [chiave]. Se lo fa, sai di avere l'utente corretto. In teoria, con registrazioni sufficienti, qualcuno potrebbe capire il tuo valore per $ mysecret e generare anche le chiavi di attivazione. Tuttavia, si noterebbero sicuramente i miliardi o più di registrazioni che sarebbe necessario prima che iniziassero a calcolare di che cosa si tratta. Il numero di attivazioni richieste si basa sulla dimensione della chiave della funzione di hashing. Usa sha1 (160 bit) vs md5 (128 bit) per rendere più difficile indovinare il tuo valore $ mysecret.
fonte
2009-05-18 04:34:21
Nessuna possibilità di collisione è aggiungere l'ID utente all'URL e controllare che entrambi corrispondano. – Eli
@Eli, c'è una possibilità, dato che alcune raccolte di caratteri eseguono l'hash sulla stessa stringa di hash. Anche se la possibilità è abbastanza trascurabile (ma ancora lì). – alex
Ehh, non sono un fan di rivelare le informazioni sulla chiave primaria all'utente. Ma questa è una buona idea, Eli. quindi key = $ generatedKey & id = $ uid –