Функция WP_CHECK_PASSWORD() в WordPress: описание и примеры использования

Функция WP_CHECK_PASSWORD() в WordPress

Что такое WP_CHECK_PASSWORD()

Функция wp_check_password() проверяет, соответствует ли введённый пользователем пароль зашифрованному паролю, который хранится в базе данных.

  • Параметр $hash — это зашифрованная строка пароля из базы данных.
  • Параметр $password — это введённый пользователем пароль в открытом виде.

Функция кодирует вводимый пароль и сравнивает полученный хэш с $hash. Если они совпадают, функция возвращает true, значит, пароль введён верно.

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

Поддержка совместимости

Функция поддерживает совместимость между старыми и новыми протоколами аутентификации с использованием библиотеки PHPass.

Заменяемая функция

Функция wp_check_password() является заменяемой (pluggable), что означает, что вы можете изменить её с помощью плагинов. Это означает, что функция будет работать только после загрузки всех плагинов. Вы не можете вызывать её напрямую из кода плагина. Вместо этого вызывайте её на хуке plugins_loaded или позже, например, на хуке init.

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

Как использовать wp_check_password()

Функция может быть вызвана следующим образом:

wp_check_password( $password, $hash, $user_id );

Параметры

  • $password (string, обязательный) — Открытый пароль пользователя.
  • $hash (string, обязательный) — Хэш пароля для проверки.
  • $user_id (string|int, необязательный) — Идентификатор пользователя. По умолчанию: ''.

Возвращаемое значение

Функция возвращает:

  • true, если пароли совпадают.
  • false, если пароль не совпадает с зашифрованным.

Пример использования

Предположим, у нас есть пароль в открытом виде, и нам нужно проверить, соответствует ли он паролю польз��вателя с ID 3:

$user = get_userdata( 3 );
if( $user ) {
    $password = 'my-super-pass';
    $hash     = $user->data->user_pass;
    if ( wp_check_password( $password, $hash ) ) {
        echo 'Это пароль пользователя';
    } else {
        echo 'Это не его пароль.';
    }
}

Важно знать

  • Глобальная переменная: $wp_hasher — объект класса PasswordHash, используемый для проверки пароля.
  • Если хэш пароля состоит из 32 символов или меньше, он считается созданным с помощью алгоритма MD5. В этом случае функция использует этот алгоритм для проверки.

Изменения

Функция была введена в версии 2.5.0.

Код функции

Вот как выглядит код функции wp_check_password():


function wp_check_password( $password, $hash, $user_id = '' ) {
global $wp_hasher;

// Если хэш все еще md5...
if ( strlen( $hash ) <= 32 ) {
    $check = hash_equals( $hash, md5( $password ) );
    if ( $check && $user_id ) {
        // Перехешировать с использованием нового хеша.
        wp_set_password( $password, $user_id );
        $hash = wp_hash_password( $password );
    }

    return apply_filters( 'check_password', $check, $password, $hash, $user_id );
}

// Если хранимый хэш длиннее MD5, предположим, что это новый стиль PHPass.
if ( empty( $wp_hasher ) ) {
    require_once ABSPATH . WPINC . '/class-phpass.php';
    $wp_hasher = new PasswordHash( 8, true );
}

$check = $wp_hasher->CheckPassword( $password, $hash );

return apply_filters( 'check_password', $check, $password, $hash, $user_id );

}

Заключение

Функция wp_check_password() — важный элемент безопасности WordPress, который помогает проверить правильность введённого пароля при аутентификации пользователей. Правильное её использование способствует защите данных пользователей и поддержанию безопасности сайта.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *