wp_verify_nonce()WP 2.0.3

Проверяет указанный одноразовый код (nonce код).

Одноразовый код создается одной из функций:

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

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

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

Основа для: check_ajax_referer()
Хуки из функции

Возвращает

int|false.

  • false - если проверка не пройдена.
  • 1 - если проверочный код был создан в первые 12 часов (в промежутке 0-12 часов).
  • 2 - если проверочный код был создан в последние 12 часов (в промежутке 12-24 часа).

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

if( wp_verify_nonce( $nonce, $action ) ){
	// проверка пройдена
}
$nonce(строка) (обязательный)
Код nonce, который нужно проверить. Обычно он передается в запросе: $_POST['_wpnonce'].
$action(строка)

Ключ, который был указан при создании nonce кода.

Это необязательное значение, которое передается функции: wp_create_nonce('значение'). Если значение не было указано при создании ключа, то и тут его можно не указывать - проверка будет пройдена.

По умолчанию: -1

Примеры

0

#1 Пример проверки передаваемых данных по $_GET запросу:

<?php $nonce= wp_create_nonce('my-nonce'); ?>

<a href='myplugin.php?_wpnonce=<?php echo $nonce ?>&data=какие-то данные'> ...

<?php
// проверяем данные
if( wp_verify_nonce( $_GET['_wpnonce'], 'my-nonce') ){
	// обрабатываем данные формы
}
else {
	die('Проверка не пройдена!'); 
}
?>

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

С версии 2.0.3 Введена.

Код wp_verify_nonce() WP 6.5.2

function wp_verify_nonce( $nonce, $action = -1 ) {
	$nonce = (string) $nonce;
	$user  = wp_get_current_user();
	$uid   = (int) $user->ID;
	if ( ! $uid ) {
		/**
		 * Filters whether the user who generated the nonce is logged out.
		 *
		 * @since 3.5.0
		 *
		 * @param int        $uid    ID of the nonce-owning user.
		 * @param string|int $action The nonce action, or -1 if none was provided.
		 */
		$uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
	}

	if ( empty( $nonce ) ) {
		return false;
	}

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

	// Nonce generated 0-12 hours ago.
	$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
	if ( hash_equals( $expected, $nonce ) ) {
		return 1;
	}

	// Nonce generated 12-24 hours ago.
	$expected = substr( wp_hash( ( $i - 1 ) . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
	if ( hash_equals( $expected, $nonce ) ) {
		return 2;
	}

	/**
	 * Fires when nonce verification fails.
	 *
	 * @since 4.4.0
	 *
	 * @param string     $nonce  The invalid nonce.
	 * @param string|int $action The nonce action.
	 * @param WP_User    $user   The current user object.
	 * @param string     $token  The user's session token.
	 */
	do_action( 'wp_verify_nonce_failed', $nonce, $action, $user, $token );

	// Invalid nonce.
	return false;
}