Mostra all'utente la sua password
Ho alcuni script automatizzati che vengono eseguiti per notificare agli utenti determinati aggiornamenti dell'applicazione, ecc... e per uno in particolare, ho bisogno di essere in grado di visualizzare il user_login
dell'utente e la sua password.
Come posso mostrare all'utente la sua password se è criptata?

Le password degli utenti vengono memorizzate nel database come ciò che viene chiamato un hash
. Gli hash
non sono reversibili, anche se si conosce l'hash e il meccanismo utilizzato per crearlo. L'unico modo per "decifrare" un hash è prendere una password, convertirla in hash, confrontarla con l'hash target e riprovare... ancora e ancora finché non si ottiene una corrispondenza. Se ci si pensa, in realtà non si sta affatto decifrando. È semplicemente un tentativo a forza bruta per prove ed errori.
La password in testo normale non viene mai salvata e non si dovrebbe tentare di salvarla, poiché ciò compromette la sicurezza del sito e, dato che le persone tendono a riutilizzare le password, anche la sicurezza di molti altri siti.

Teoricamente, questo potrebbe essere realizzato salvando la password di un utente altrove, quando la aggiorna.
Nota che questo tipo di approccio è quasi mai raccomandabile.
Nella maggior parte dei casi, esiste un approccio architetturale migliore che rende superfluo dover mostrare le password in testo semplice.
Detto questo, se proprio devi farlo, ecco come potrebbe essere fatto:
function wpse_97127_save_passes( $errors, $update, $user )
{
if (
empty( $errors->errors ) &&
! empty ( $_POST['pass1'] )
) {
/* se devi salvarla in forma reversibile, almeno non salvarla in testo semplice */
$pass = base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
md5(AUTH_KEY),
$_POST['pass1'],
MCRYPT_MODE_CBC,
md5(md5(AUTH_KEY))
)
);
// fai qualcosa con $pass, ad esempio salvala da qualche parte
}
}
add_action( 'user_profile_update_errors', 'wpse_97127_save_passes', 0, 3 );
Il codice sopra può essere invertito nel seguente modo:
$pass_from_db = $wpdb->get_results( /* recupera la password criptata ma reversibile dal db */ );
$pass = rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
md5(AUTH_KEY),
base64_decode($pass_from_db),
MCRYPT_MODE_CBC,
md5(md5(AUTH_KEY))
),
"\0"
);
Per favore non fare questo in ambienti di produzione con account utente di singoli individui senza il loro consenso o conoscenza. Questo non solo costituirebbe una pessima pratica, ma sarebbe anche un atto non etico.
Io utilizzo il codice sopra in un solo caso con un ruolo utente specifico, le cui capacità sono limitate, i nuovi utenti vengono sempre configurati da un amministratore o un ruolo superiore, e la cui password è condivisa con più persone fin dall'inizio.
E comunque non mi sento a mio agio nel farlo.
