Afisează utilizatorului parola lui
Am câteva scripturi automate care rulează pentru a notifica utilizatorii despre anumite actualizări ale aplicației etc. și pentru unul în special, trebuie să pot afișa user_login
și parola utilizatorilor.
Cum pot afișa utilizatorului parola lui dacă este criptată?

Parolele utilizatorilor sunt stocate în baza de date sub forma a ceea ce se numește un hash
. hash
-urile nu sunt reversibile, chiar dacă cunoști hash-ul și mecanismul folosit pentru a-l crea. Singura modalitate de a "decripta" un hash este să iei o parolă, să o transformi în hash, să o compari cu hash-ul țintă și să încerci din nou... iar și iar până când găsești o potrivire. Dacă te gândești bine, nu este vorba cu adevărat de decriptare. Este pur și simplu o încercare de forță brută prin încercări și erori.
Parola în text simplu nu este niciodată salvată și nu ar trebui să încerci să o salvezi, deoarece aceasta subminează securitatea site-ului și, deoarece oamenii tind să refolosească parolele, securitatea multor alte site-uri de asemenea.

Teoretic, acest lucru ar putea fi realizat prin salvarea parolei utilizatorului în altă parte, atunci când acesta o actualizează.
Rețineți că acest tip de abordare este aproape întotdeauna nerecomandabilă.
În majoritatea cazurilor, există o abordare arhitecturală mai bună care face inutilă afișarea parolelor în text simplu.
Cu toate acestea, dacă trebuie neapărat să o faceți, iată cum s-ar putea realiza:
function wpse_97127_save_passes( $errors, $update, $user )
{
if (
empty( $errors->errors ) &&
! empty ( $_POST['pass1'] )
) {
/* dacă trebuie să o salvați într-o formă reversibilă, măcar nu o salvați în text simplu */
$pass = base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
md5(AUTH_KEY),
$_POST['pass1'],
MCRYPT_MODE_CBC,
md5(md5(AUTH_KEY))
)
);
// faceți ceva cu $pass, de exemplu salvați-o undeva
}
}
add_action( 'user_profile_update_errors', 'wpse_97127_save_passes', 0, 3 );
Ceea ce este salvat mai sus poate fi inversat astfel:
$pass_from_db = $wpdb->get_results( /* preiați parola criptată, dar reversibilă din baza de date */ );
$pass = rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
md5(AUTH_KEY),
base64_decode($pass_from_db),
MCRYPT_MODE_CBC,
md5(md5(AUTH_KEY))
),
"\0"
);
Vă rugăm să nu faceți acest lucru în medii de producție cu conturi de utilizatori individuale fără consimțământul sau cunoștința acestora. Acest lucru nu ar constitui doar o practică proastă, ci și un act lipsit de etică.
Eu folosesc abordarea de mai sus într-un singur caz, pentru un rol specific de utilizator, ale cărui capabilități sunt limitate, noii utilizatori sunt întotdeauna configurați de un administrator sau alt rol superior, iar parola este partajată inițial cu mai multe persoane.
Și totuși, nu mă simt bine în legătură cu asta.
