WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

wp_create_nonce()WP 2.0.3

Создает уникальный защитный ключ на короткий промежуток времени (от 12 до 24 часов).

Ключ создается как часть хэша из:

  • Для авторизованных юзеров:

    метка_времени | action | ID_юзера | $token_сессии | wp_salt
  • Для неавторизованных:

    метка_времени | action | wp_salt

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

Для всех неавторизованных пользователей создается одинаковый nonce код (проверял). Так например, можно зайти на сайт скопировать из HTML или из нужного запроса код и использовать его для злых целей против другого неавторизованного пользователя. Технически мы всегда можем точно узнать nonce код для любого неавторизованного пользователя, поэтому для неавторизованных пользователей использовать nonce код для какой-то защиты смысла не много.

Время жизни nonce ключа можно изменить через фильтр nonce_life

$nonce_life = apply_filters( 'nonce_life', DAY_IN_SECONDS );

Имейте ввиду, указываемое значение делится на 2 - это своего рода 2 варианта: до и после. По умолчанию код создается на 24 часа (один день) и при проверке кода через wp_verify_nonce() функция вернет нам 1 или 2, в зависимости от того, какой половине (первым 12 часам или вторым) соответствует nonce код.

Используйте функцию во время или после события init, иначе могут возникнуть проблемы.

Про одноразовые числа читайте в отдельной статье.

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

Замена функции (переопределение) — в must-use или обычном плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.

Работает на основе: wp_nonce_tick(), wp_get_session_token(), wp_get_current_user()
Основа для: wp_nonce_url(), wp_nonce_field()
1 раз — 0.000025 сек (очень быстро) | 50000 раз — 0.21 сек (очень быстро) | PHP 7.1.1, WP 4.7.2
Хуки из функции

Возвращает

Строку. Строку: уникальное сочетание знаков.

Использование

wp_create_nonce( $action );
$action(строка)
Значение на основе которого будет создан уникальный ключ.
По умолчанию: -1

Примеры

1

#1 Получим уникальный ключ

echo wp_create_nonce();
// выведет подобный ключ: c6d25d33be
-1

#2 Пример создания проверочного поля формы

Создадим проверочный код и добавим его в УРЛ, а затем проверим этот код:

<?php $nonce = wp_create_nonce('my-nonce'); ?>
<a href='myplugin.php?_wpnonce=<?php echo $nonce ?>&data=mydata'> ...

<?php
// теперь, там где получаем данные проверяем
$nonce = $_REQUEST['_wpnonce'];

if( ! wp_verify_nonce( $nonce, 'my-nonce') )
	die('Проверка не пройдена!');
?>

Список изменений

С версии 2.0.3 Введена.
С версии 4.0.0 Session tokens were integrated with nonce creation.

Код wp_create_nonce() WP 6.5.2

function wp_create_nonce( $action = -1 ) {
	$user = wp_get_current_user();
	$uid  = (int) $user->ID;
	if ( ! $uid ) {
		/** This filter is documented in wp-includes/pluggable.php */
		$uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
	}

	$token = wp_get_session_token();
	$i     = wp_nonce_tick( $action );

	return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
}
6 комментариев
    Войти