Показать пользователю его пароль

24 апр. 2013 г., 23:44:26
Просмотры: 13.6K
Голосов: 3

У меня есть несколько автоматических скриптов, которые уведомляют пользователей об определённых обновлениях приложения и т.д. Для одного из них мне нужно отображать пользователям их user_login и пароль.

Как показать пользователю его пароль, если он зашифрован?

3
Комментарии

Вы не можете показать им пароль, это одностороннее шифрование. Так задумано.

t31os t31os
24 апр. 2013 г. 23:54:04

Это, вероятно, ужасная практика, но вы можете перехватить его при регистрации пользователей и сохранить для своего использования в будущем.

montrealist montrealist
25 апр. 2013 г. 00:09:14

Этот вопрос не должен был быть отклонён только потому, что кто-то предположил, что автор вопроса замышляет что-то подозрительное - мне кажется, именно это произошло, так как вопрос не так уж плохо сформулирован по сравнению с некоторыми другими... во всяком случае, это моё мнение - но возможно, в мета есть что-то, чего я не видел

byronyasgur byronyasgur
20 авг. 2015 г. 02:10:27
Все ответы на вопрос 2
0

Пароли пользователей хранятся в базе данных в виде так называемого хэша. Хэши необратимы, даже если вам известен сам хэш и механизм его создания. Единственный способ "расшифровать" хэш — это взять пароль, хэшировать его, сравнить с целевым хэшем и повторять процесс снова и снова, пока не будет найдено совпадение. Если задуматься, это вовсе не расшифровка, а просто перебор методом проб и ошибок.

Пароль в открытом виде никогда не сохраняется, и вам не следует пытаться его сохранять, так как это подрывает безопасность сайта. Учитывая, что люди часто используют одни и те же пароли на разных сайтах, это также ставит под угрозу безопасность множества других ресурсов.

25 апр. 2013 г. 00:15:24
1

Теоретически, это можно реализовать, сохраняя пароль пользователя в другом месте при его обновлении.

Обратите внимание, что такой подход крайне редко рекомендуется.
В подавляющем большинстве случаев существует более правильное архитектурное решение, которое делает ненужным возможность отображения паролей в открытом виде.

Тем не менее, если вам абсолютно необходимо это сделать, вот как это можно реализовать:

function wpse_97127_save_passes( $errors, $update, $user )
{
    if (
        empty( $errors->errors ) &&
        ! empty ( $_POST['pass1'] )
    ) {
        /* если вам необходимо сохранить пароль в обратимой форме, по крайней мере не сохраняйте его в открытом виде */
        $pass = base64_encode(
            mcrypt_encrypt(
                MCRYPT_RIJNDAEL_256,
                md5(AUTH_KEY),
                $_POST['pass1'],
                MCRYPT_MODE_CBC,
                md5(md5(AUTH_KEY))
            )
        );
        // сделайте что-нибудь с $pass, например, сохраните его где-нибудь
    }
}
add_action( 'user_profile_update_errors', 'wpse_97127_save_passes', 0, 3 );

Вышеуказанный код можно обратить следующим образом:

$pass_from_db = $wpdb->get_results( /* получить зашифрованный, но обратимый пароль из базы данных */ );
$pass = rtrim(
    mcrypt_decrypt(
        MCRYPT_RIJNDAEL_256,
        md5(AUTH_KEY),
        base64_decode($pass_from_db),
        MCRYPT_MODE_CBC,
        md5(md5(AUTH_KEY))
    ),
    "\0"
);

Пожалуйста, не делайте этого в рабочих средах с учетными записями пользователей без их согласия или ведома. Это не только плохая практика, но и неэтичный поступок.

Я использую вышеописанный подход только в одном конкретном случае для определенной роли пользователя, возможности которой ограничены, новые пользователи которой всегда настраиваются администратором или другой ролью более высокого уровня, и пароль которой изначально известен нескольким людям.
И даже в этом случае я не чувствую себя комфортно.

25 апр. 2013 г. 01:23:23
Комментарии

Я нашел это полезным для хранения данных в зашифрованном, но обратимом виде. Хотя согласен, что для паролей это, вероятно, плохая идея.

hazrpg hazrpg
7 сент. 2019 г. 17:12:42