WP_SALT() │ WP 2.5.0
Функция WP_SALT() используется для получения соли, которую добавляют к хэшам.
Что такое соль?
Соли создаются с помощью секретных ключей. Эти ключи находятся в двух местах: в базе данных и в файле wp-config.php. Секретный ключ в базе данных генерируется случайным образом и добавляется к секретным ключам в wp-config.php.
Для по��ышения безопасности секретные ключи в файле wp-config.php следует настроить на сильные, случайные ключи. Ниже приведен пример того, как определяются эти ключи. Не вставляйте этот пример прямо в wp-config.php, лучше воспользуйтесь генератором секретных ключей, который создаст их специально для вас.
define('AUTH_KEY', 'XakmM%G4Yt>f`z]MON');
define('SECURE_AUTH_KEY', 'LzJ}op]mr|6+![P}Ak:uNdJCJZd>(Hx.-Mh#Tz)pCIU#uGEnfFz|f ;;eU%/U^O~');
define('LOGGED_IN_KEY', '|i|Ux`9z7X>QYR0Z_XnZ@|');
define('AUTH_SALT', 'eZyT)-Naw]F8CwA*VaW#q*|.)g@o}||wf~@C-YSt}(dh_r6EbI#A,y|nU2{B#JBW');
define('SECURE_AUTH_SALT', '!=oLUTXh,QW=H }L|9/^4-3 STz},T(w}W*c(u`g~EJBf#8u#R{mUEZrozmm');
define('NONCE_SALT', 'hGXHhD>SLWVfg1(1(N{;.V!MoE(SfbA_ksP@&+AycHcAV$+?@3q+rxV{%^VyKT');
Соль для паролей помогает защититься от инструментов, которые хранят хэшированные значения популярных слов из словаря. Добавление соли усложняет взлом паролей.
Замещаемая функция
Функция wp_salt() является замещаемой, что означает, что её можно переопределить в плагинах. Это значит, что функция работает только после загрузки всех плагинов. До этой точки функция не определена, и вы не можете вызывать её напрямую из кода плагина. Вызов следует делать на хуке plugins_loaded или позже, например на хуке init.
Переопределение функции
В плагинах (как обязательных, так и обычных) вы можете создать функцию с тем же именем, и она заменит оригинальную функцию.
Использование функции
wp_salt( $scheme );
Параметры
- $scheme (строка): Схема аутентификации (auth, secure_auth, logged_in, nonce). По умолчанию:
'auth'
Примеры использования
$salt = wp_salt('logged_in');
echo $salt;
Вывод будет похож на следующий:
0D3*SIMO4$(t~I;E]NBx}LVy2U8o|{vbxH4t3l-!4-Io N(U74&+BdC^S,~*0^B>k,|4/76[PG|V:)}o$)!hh1GgZ>t8[A-rmF&RDU~|fcN1/]T7i/=H
Обновления
- С версии 2.5.0: Функция была введена.
Код функции wp_salt()
function wp_salt( $scheme = 'auth' ) {
static $cached_salts = array();
if ( isset( $cached_salts[ $scheme ] ) ) {
// Фильтруем значение соли
return apply_filters( 'salt', $cached_salts[ $scheme ], $scheme );
}
static $duplicated_keys;
if ( null === $duplicated_keys ) {
$duplicated_keys = array();
// Определяем дубликаты ключей
foreach ( array( 'AUTH', 'SECURE_AUTH', 'LOGGED_IN', 'NONCE', 'SECRET' ) as $first ) {
foreach ( array( 'KEY', 'SALT' ) as $second ) {
if ( ! defined( "{$first}_{$second}" ) ) {
continue;
}
$value = constant( "{$first}_{$second}" );
$duplicated_keys[ $value ] = isset( $duplicated_keys[ $value ] );
}
}
$duplicated_keys['put your unique phrase here'] = true;
$duplicated_keys[ __( 'put your unique phrase here' ) ] = true;
}
// Определяем, какие опции необходимо подготовить
$options_to_prime = array();
foreach ( array( 'auth', 'secure_auth', 'logged_in', 'nonce' ) as $key ) {
foreach ( array( 'key', 'salt' ) as $second ) {
$const = strtoupper( "{$key}_{$second}" );
if ( ! defined( $const ) || true === $duplicated_keys[ constant( $const ) ] ) {
$options_to_prime[] = "{$key}_{$second}";
}
}
}
if ( ! empty( $options_to_prime ) ) {
$options_to_prime[] = 'secret_key';
wp_prime_site_option_caches( $options_to_prime );
}
$values = array(
'key' => '',
'salt' => '',
);
if ( defined( 'SECRET_KEY' ) && SECRET_KEY && empty( $duplicated_keys[ SECRET_KEY ] ) ) {
$values['key'] = SECRET_KEY;
}
if ( 'auth' === $scheme && defined( 'SECRET_SALT' ) && SECRET_SALT && empty( $duplicated_keys[ SECRET_SALT ] ) ) {
$values['salt'] = SECRET_SALT;
}
if ( in_array( $scheme, array( 'auth', 'secure_auth', 'logged_in', 'nonce' ), true ) ) {
foreach ( array( 'key', 'salt' ) as $type ) {
$const = strtoupper( "{$scheme}_{$type}" );
if ( defined( $const ) && constant( $const ) && empty( $duplicated_keys[ constant( $const ) ] ) ) {
$values[ $type ] = constant( $const );
} elseif ( ! $values[ $type ] ) {
$values[ $type ] = get_site_option( "{$scheme}_{$type}" );
if ( ! $values[ $type ] ) {
$values[ $type ] = wp_generate_password( 64, true, true );
update_site_option( "{$scheme}_{$type}", $values[ $type ] );
}
}
}
} else {
if ( ! $values['key'] ) {
$values['key'] = get_site_option( 'secret_key' );
if ( ! $values['key'] ) {
$values['key'] = wp_generate_password( 64, true, true );
update_site_option( 'secret_key', $values['key'] );
}
}
$values['salt'] = hash_hmac( 'md5', $scheme, $values['key'] );
}
$cached_salts[ $scheme ] = $values['key'] . $values['salt'];
/** Этот фильтр задокументирован в wp-includes/pluggable.php */
return apply_filters( 'salt', $cached_salts[ $scheme ], $scheme );
}
Связанные функции
- Проверка безопасности
check_admin_referer()check_ajax_referer()sanitize_url()wp_create_nonce()wp_generate_password()wp_hash()wp_hash_password()wp_http_validate_url()wp_kses_post()wp_nonce_ays()wp_nonce_field()wp_nonce_url()wp_referer_field()wp_sanitize_redirect()wp_verify_nonce()
Эта структура и объяснения помогут вам лучше понять, как работает функция WP_SALT() и почему она важна для безопасности вашего сайта на WordPress.