Mostra all'utente la sua password

24 apr 2013, 23:44:26
Visualizzazioni: 13.6K
Voti: 3

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?

3
Commenti

Non puoi mostrare loro la password, è una crittografia unidirezionale. È progettato così per scelta.

t31os t31os
24 apr 2013 23:54:04

Probabilmente è una pessima pratica, ma potresti intercettarla quando gli utenti si registrano e salvarla per un tuo utilizzo futuro.

montrealist montrealist
25 apr 2013 00:09:14

Questa domanda non avrebbe dovuto essere votata negativamente solo perché qualcuno presume che l'OP stia facendo qualcosa di poco chiaro - a me sembra che sia successo proprio questo, dato che non è scritta così male come domanda rispetto ad altre... questa è la mia opinione comunque - ma forse c'è qualcosa nel meta che non ho visto

byronyasgur byronyasgur
20 ago 2015 02:10:27
Tutte le risposte alla domanda 2
0

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.

25 apr 2013 00:15:24
1

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.

25 apr 2013 01:23:23
Commenti

Ho trovato questo utile per memorizzare le cose in forma crittografata ma reversibile. Concordo però che probabilmente sia una cattiva idea per le password.

hazrpg hazrpg
7 set 2019 17:12:42