wp_verify_nonce()

Проверяет, был ли использован правильный секретный код безопасности с учетом временных ограничений
Функция WordPress
INT 2.0.3
WordPress Icon

Описание функции

Функция wp_verify_nonce() используется для проверки правильности использования безопасного идентификатора (nonce) с ограничением по времени. Она проверяет, был ли передан правильный идентификатор (nonce) и был ли он создан в течение определенного временного интервала.

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

wp_verify_nonce( string $nonce, string|int $action = -1 ): int|false

Функция wp_verify_nonce() принимает два параметра: $nonce (обязательный) и $action (необязательный). Она возвращает целое число или логическое значение false.

  • $nonce (string) — Обязательный. Значение идентификатора (nonce), которое было использовано для проверки, обычно передается через поле формы.
  • $action (string|int) — Необязательный. Должен указывать контекст того, что происходит, и должен быть таким же, как при создании идентификатора (nonce). По умолчанию: -1.

Функция возвращает целое число или логическое значение false. Возвращаемые значения:

  • 1 — если идентификатор (nonce) действителен и был создан в течение последних 0-12 часов.
  • 2 — если идентификатор (nonce) действителен и был создан в течение последних 12-24 часов.
  • false — если идентификатор (nonce) недействителен.
<?php
// Проверка идентификатора (nonce) при обработке формы
if ( isset( $_POST['submit'] ) ) {
    $nonce = $_POST['my_nonce'];
    $action = 'my_action';
    // Проверка идентификатора (nonce)
    if ( wp_verify_nonce( $nonce, $action ) ) {
        // Идентификатор (nonce) действителен, выполняем действия
        // ...
    } else {
        // Идентификатор (nonce) недействителен, обрабатываем ошибку
        // ...
    }
}
?>

В приведенном выше примере кода функция wp_verify_nonce() используется для проверки правильности идентификатора (nonce), переданного через поле формы. Если идентификатор (nonce) действителен, то выполняются определенные действия, в противном случае обрабатывается ошибка.

Примеры использования

Проверка валидности nonce при отправке формы


// Создание nonce
$nonce = wp_create_nonce( 'my-nonce' );
// Вывод формы с полем для nonce
echo '<form method="post">';
echo '<input type="hidden" name="my-nonce" value="' . esc_attr( $nonce ) . '">';
echo '<input type="submit" value="Submit">';
echo '</form>';
// Проверка валидности nonce при обработке формы
if ( isset( $_POST['my-nonce'] ) && wp_verify_nonce( $_POST['my-nonce'], 'my-nonce' ) ) {
    // Действия при валидном nonce
    echo 'Nonce is valid.';
} else {
    // Действия при невалидном nonce
    echo 'Nonce is invalid.';
}

Проверка валидности nonce при обновлении данных пользователя


// Получение текущего пользователя
$user_id = get_current_user_id();
// Создание nonce для обновления данных пользователя
$nonce = wp_create_nonce( 'update-user_' . $user_id );
// Проверка валидности nonce при обновлении данных пользователя
if ( isset( $_POST['update-user-nonce'] ) && wp_verify_nonce( $_POST['update-user-nonce'], 'update-user_' . $user_id ) ) {
    // Действия при валидном nonce
    echo 'Nonce is valid.';
} else {
    // Действия при невалидном nonce
    echo 'Nonce is invalid.';
}

Проверка валидности nonce при удалении записи


// Получение ID записи для удаления
$post_id = 123;
// Создание nonce для удаления записи
$nonce = wp_create_nonce( 'delete-post_' . $post_id );
// Проверка валидности nonce при удалении записи
if ( isset( $_POST['delete-post-nonce'] ) && wp_verify_nonce( $_POST['delete-post-nonce'], 'delete-post_' . $post_id ) ) {
    // Действия при валидном nonce
    echo 'Nonce is valid.';
} else {
    // Действия при невалидном nonce
    echo 'Nonce is invalid.';
}

Проверка валидности nonce при загрузке файла


// Создание nonce для загрузки файла
$nonce = wp_create_nonce( 'upload-file' );
// Проверка валидности nonce при загрузке файла
if ( isset( $_POST['upload-file-nonce'] ) && wp_verify_nonce( $_POST['upload-file-nonce'], 'upload-file' ) ) {
    // Действия при валидном nonce
    echo 'Nonce is valid.';
} else {
    // Действия при невалидном nonce
    echo 'Nonce is invalid.';
}

Проверка валидности nonce при добавлении нового поста


// Создание nonce для добавления нового поста
$nonce = wp_create_nonce( 'add-post' );
// Проверка валидности nonce при добавлении нового поста
if ( isset( $_POST['add-post-nonce'] ) && wp_verify_nonce( $_POST['add-post-nonce'], 'add-post' ) ) {
    // Действия при валидном nonce
    echo 'Nonce is valid.';
} else {
    // Действия при невалидном nonce
    echo 'Nonce is invalid.';
}

Вопросы и ответы

Как проверить, что nonce является действительным?

Для проверки действительности nonce в WordPress используется функция wp_verify_nonce(). Она принимает два параметра: $nonce — значение nonce, которое было использовано для проверки, и $action — контекст, в котором был создан nonce.

Функция возвращает целое число или логическое значение false. Если nonce действительный и был создан в пределах последних 0-12 часов, функция вернет 1. Если nonce действительный и был создан в пределах последних 12-24 часов, функция вернет 2. Если nonce недействительный, функция вернет false.


$nonce = $_POST['nonce'];
$action = 'my_action';
if ( wp_verify_nonce( $nonce, $action ) ) {
    // Nonce is valid
} else {
    // Nonce is invalid
}

Как получить значение nonce из формы?

Значение nonce можно получить из формы с помощью функции wp_nonce_field(). Она генерирует скрытое поле формы с значением nonce и выводит его на страницу.


wp_nonce_field( 'my_action', 'my_nonce' );

Какой контекст должен быть указан при создании nonce?

При создании nonce необходимо указать контекст, который будет использоваться при проверке его действительности. Контекст должен быть одинаковым при создании и проверке nonce. Это может быть любая строка, которая описывает действие или событие, для которого используется nonce.


$action = 'my_action';
$nonce = wp_create_nonce( $action );

Как часто обновляется nonce?

Nonce обновляется каждый раз, когда он создается. Это означает, что каждый раз, когда вы создаете новый nonce, предыдущий становится недействительным.

Пример использования функции wp_create_nonce() для создания нового nonce:


$action = 'my_action';
$nonce = wp_create_nonce( $action );

Какие действия могут привести к недействительности nonce?

Недействительность nonce может быть вызвана следующими действиями:

  • Использование неправильного значения nonce при проверке.
  • Использование неправильного значения действия (action) при проверке.
  • Срок действия nonce истек (более 24 часов).

Какой формат должен иметь nonce?

Nonce должен быть представлен в виде строки.

Как использовать wp_verify_nonce() в темах WordPress?

Функция wp_verify_nonce() используется для проверки правильности nonce в темах WordPress. Она принимает два параметра: $nonce и $action.

Пример использования:


if ( isset( $_POST['submit'] ) ) {
  $nonce = $_POST['my_nonce'];
  $action = 'my_action';
  if ( wp_verify_nonce( $nonce, $action ) ) {
    // Действия, если nonce действителен
  } else {
    // Действия, если nonce недействителен
  }
}

Как обрабатывать ошибку недействительного nonce?

Если nonce недействителен, можно выполнить следующие действия:

  • Отобразить сообщение об ошибке.
  • Перенаправить пользователя на другую страницу.
  • Запретить доступ к определенным функциям или данным.

Функция wp_verify_nonce() используется для проверки правильности nonce в темах WordPress. Она возвращает 1, если nonce действителен и был создан в течение последних 12 часов, 2, если nonce действителен и был создан в течение последних 24 часов, и false, если nonce недействителен. При использовании wp_verify_nonce() необходимо учитывать возможные действия, которые могут привести к недействительности nonce, а также обрабатывать ошибку недействительного nonce соответствующим образом.

Связанные элементы

  • Функция wp_create_nonce(): генерирует уникальный идентификатор (nonce) для использования в проверке безопасности.
  • Функция wp_nonce_field(): генерирует поле формы с уникальным идентификатором (nonce) для использования в проверке безопасности.
  • Функция wp_nonce_url(): добавляет уникальный идентификатор (nonce) к URL-адресу для использования в проверке безопасности.
  • Функция wp_referer_field(): генерирует скрытое поле формы с URL-адресом предыдущей страницы для использования в проверке безопасности.
  • Функция wp_nonce_ays(): выводит сообщение об ошибке, если проверка безопасности с идентификатором (nonce) не прошла.
  • Хук check_admin_referer: вызывается при проверке безопасности с идентификатором (nonce) в административной части сайта.
  • Хук check_ajax_referer: вызывается при проверке безопасности с идентификатором (nonce) в AJAX-запросах.
  • Хук nonce_life: позволяет изменить время жизни идентификатора (nonce).
Обсуждение