Utilizzare user_activation_key per altri scopi in WordPress
Ho bisogno di sapere se è sicuro utilizzare user_activation_key
(da WP_User
) per altri scopi come la verifica email (una funzionalità che vorrei creare per inviare una verifica email prima di attivare l'account creato)?
Ecco come funzionerà il processo. Un utente si registrerà utilizzando il mio modulo di registrazione personalizzato che sarà disponibile solo nel front-end. Dopo la registrazione avvenuta con successo, l'utente riceverà una notifica via email che l'account è stato creato insieme al link di attivazione generato durante la registrazione utilizzando la seguente convenzione:
http://www.example.com/verify/?key=SAMPLEACTIVATIONKEY4321
Pensate che questo metodo sia sicuro?

Pensi che questo sarà sicuro?
Forse. Ci sono due problemi.
Devi anche assicurarti che la chiave non sia indovinabile. Niente numeri incrementali. Puoi usare qualcosa come wp_generate_password
per ottenere caratteri pseudo casuali. Usa un "salt" casuale più l'email dell'utente e l'ora di registrazione oppure uniqid
e avrai buone probabilità di garantire l'unicità (vedi sotto) e creare una chiave non indovinabile.
$user_email = some_function_to_get_user_email();
$salt = wp_generate_password(20); // stringa "random" di 20 caratteri
$key = sha1($salt . $user_email . uniqid(time(), true));
Dovrai anche assicurarti che la chiave sia unica: non dovrebbero esserci collisioni.
Non ci sono vincoli nella colonna user_activation_key
del database che garantiscono l'unicità, quindi spetta alla tua applicazione (es. WordPress e la parte PHP) assicurarsene. In altre parole, prima o dopo aver generato la chiave, assicurati che non esista già nel database. Esempio semplice non testato:
<?php
$key = some_function_that_generates_a_key();
$res = $wpdb->get_col($wpdb->prepare("SELECT EXISTS(SELECT 1 FROM {$wpdb->users} WHERE user_activation_key = %s)", $key));
if ($res) {
// la chiave esiste, riprova!
} else {
// tutto ok.
}
Se hai bisogno di una guida, prova a vedere come WordPress gestisce le email di reset della password. Il processo è lo stesso: genera una chiave non indovinabile, assicurati che sia unica, inseriscila nel database con l'utente corrispondente, poi invia loro un'email con un link per reimpostare la password.

Ciao @Ajay, ho modificato la mia domanda per includere maggiori dettagli. Per favore controlla di nuovo perché non ho capito cosa intendessi con "qualcuno usa questo".

Penso che intenda che deve essere reso più specifico per l'utente a cui appartiene la chiave di attivazione. Questo impedirà a individui di utilizzare metodi di forza bruta per accedere all'account di qualcun altro.

@Ollie Mi sono assicurato che la chiave di attivazione venga inviata all'indirizzo email dell'utente che sta tentando di registrarsi. Inoltre la chiave di attivazione contiene un valore hash del nome utente, password e timestamp. Sto facendo la cosa giusta? Sono piuttosto nuovo a queste cose con Wordpress.
