WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_create_nonce() WP 2.0.4

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

Ключ создается как часть хэша из: временная метка|указанный action|ID юзера|$token сессии. Таким образом если измениться любое из значений, nonce поменяется.

Нет смысла использовать эту функцию для проверки действий неавторизованных пользователей. Если юзер неавторизован, то значения ID юзера|$token сессии будут пустыми, что в свою очередь позволяет точно определить текущий nonce код.

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

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

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

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

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

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

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

Работает на основе: 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 Получим уникальный ключ

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

#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 5.5.1

wp-includes/pluggable.php
<?php
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();

	return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
}

Cвязанные функции

Из метки: nonce (защита)

Еще из метки: Безопасность

Еще из раздела: Защита

6 комментов