Функция 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, который помогает проверить правильность введённого пароля при аутентификации пользователей. Правильное её использование способствует защите данных пользователей и поддержанию безопасности сайта.