check_ajax_referer

Срабатывает после валидации запроса Ajax
Хук WordPress
INT 2.1.0
WordPress Icon

Описание хука

Хук «check_ajax_referer» вызывается после проверки Ajax-запроса на валидность. Он позволяет определить, прошла ли проверка Ajax-запроса или нет.

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

do_action( 'check_ajax_referer', string $action, false|int $result )

Этот хук вызывается с использованием функции do_action, которая передает параметры $action (строка) и $result (логическое значение или целое число).

  • $action (строка): Действие Ajax nonce.
  • $result (логическое значение или целое число): False, если nonce недействителен, 1, если nonce действителен и сгенерирован в течение последних 0-12 часов, 2, если nonce действителен и сгенерирован в течение последних 12-24 часов.
<?php
/**
 * Проверка Ajax-запроса на валидность.
 *
 * @param string     $action Действие Ajax nonce.
 * @param false|int  $result Результат проверки Ajax-запроса.
 */
function check_ajax_referer_example( $action, $result ) {
    if ( $result === false ) {
        // Действие, если nonce недействителен.
    } elseif ( $result === 1 ) {
        // Действие, если nonce действителен и сгенерирован в течение последних 0-12 часов.
    } elseif ( $result === 2 ) {
        // Действие, если nonce действителен и сгенерирован в течение последних 12-24 часов.
    }
}
add_action( 'check_ajax_referer', 'check_ajax_referer_example', 10, 2 );

В приведенном примере кода определена функция check_ajax_referer_example, которая принимает параметры $action и $result. Внутри функции проверяется значение $result и выполняются соответствующие действия в зависимости от результата проверки Ajax-запроса.

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

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


add_action( 'check_ajax_referer', 'my_check_ajax_referer', 10, 2 );
function my_check_ajax_referer( $action, $result ) {
    if ( false === $result ) {
        // Действия при невалидном Ajax nonce
    } else {
        // Действия при валидном Ajax nonce
    }
}

Хук check_ajax_referer срабатывает после валидации Ajax запроса. Он принимает два параметра: $action — строка, содержащая действие Ajax nonce, и $result — значение, указывающее на валидность Ajax nonce.

Генерация Ajax nonce


$nonce = wp_create_nonce( 'my_ajax_nonce_action' );

Для генерации Ajax nonce используется функция wp_create_nonce(). Она принимает строку, представляющую действие Ajax nonce, и возвращает сгенерированный nonce.

Проверка времени генерации Ajax nonce


$nonce = $_POST['nonce'];
$action = 'my_ajax_nonce_action';
$result = wp_verify_nonce( $nonce, $action );
if ( 1 === $result ) {
    // Нонс был сгенерирован между 0-12 часами назад
} elseif ( 2 === $result ) {
    // Нонс был сгенерирован между 12-24 часами назад
} else {
    // Нонс недействителен
}

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

Обработка невалидного Ajax nonce


add_action( 'check_ajax_referer', 'my_check_ajax_referer', 10, 2 );
function my_check_ajax_referer( $action, $result ) {
    if ( false === $result ) {
        // Действия при невалидном Ajax nonce
    }
}

Если Ajax nonce недействителен, можно выполнить определенные действия внутри функции, привязанной к хуку check_ajax_referer.

Обработка валидного Ajax nonce


add_action( 'check_ajax_referer', 'my_check_ajax_referer', 10, 2 );
function my_check_ajax_referer( $action, $result ) {
    if ( 1 === $result || 2 === $result ) {
        // Действия при валидном Ajax nonce
    }
}

Если Ajax nonce действителен, можно выполнить определенные действия внутри функции, привязанной к хуку check_ajax_referer.

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

Почему мой Ajax запрос не проходит проверку?

Если ваш Ajax запрос не проходит проверку, это может быть вызвано неверным или просроченным nonce. Необходимо убедиться, что вы правильно генерируете и проверяете nonce.

Как правильно использовать хук check_ajax_referer?

Хук check_ajax_referer используется для проверки валидности Ajax nonce. Он вызывается после того, как Ajax запрос был проверен на валидность или невалидность.

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


do_action( 'check_ajax_referer', $action, $result );

В этом примере $action — это действие Ajax nonce, а $result — результат проверки nonce. Результат может быть false, если nonce невалидный, 1, если nonce валидный и сгенерирован в течение последних 0-12 часов, или 2, если nonce валидный и сгенерирован в течение последних 12-24 часов.

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

Срок действия генерируемого nonce по умолчанию составляет 12 часов. Вы можете изменить этот срок, используя фильтр «nonce_life».

Пример изменения срока действия генерируемого nonce:


add_filter( 'nonce_life', function() {
    return 24 * 60 * 60; // 24 часа
} );

В этом примере мы устанавливаем срок действия генерируемого nonce в 24 часа.

Как проверить валидность nonce, сгенерированного более 24 часов назад?

По умолчанию, nonce, сгенерированный более 24 часов назад, считается невалидным. Вы можете изменить это поведение, используя фильтр «nonce_user_logged_out».

Пример изменения проверки валидности nonce, сгенерированного более 24 часов назад:


add_filter( 'nonce_user_logged_out', function() {
    return 7 * 24 * 60 * 60; // 7 дней
} );

В этом примере мы устанавливаем срок действия nonce, сгенерированного более 24 часов назад, в 7 дней.

Как изменить сообщение об ошибке при невалидном nonce?

Для изменения сообщения об ошибке при невалидном nonce в хуке check_ajax_referer можно использовать фильтр «wp_die_ajax_handler».

add_filter( 'wp_die_ajax_handler', 'my_custom_ajax_error_message' );
function my_custom_ajax_error_message( $message ) {
    $message = 'Мой пользовательский текст ошибки';
    return $message;
}

Как использовать хук check_ajax_referer для защиты от CSRF атак?

Хук check_ajax_referer используется для проверки валидности nonce в AJAX-запросах и защиты от CSRF атак.

add_action( 'check_ajax_referer', 'my_custom_csrf_protection', 10, 2 );
function my_custom_csrf_protection( $action, $result ) {
    if ( false === $result ) {
        // Обработка невалидного nonce
    } else {
        // Обработка валидного nonce
    }
}

Какие действия выполняются после успешной проверки nonce?

После успешной проверки nonce в хуке check_ajax_referer можно выполнять различные действия, например, обработку данных, сохранение информации или отправку ответа клиенту.

add_action( 'check_ajax_referer', 'my_custom_nonce_success_action', 10, 2 );
function my_custom_nonce_success_action( $action, $result ) {
    if ( 1 === $result ) {
        // Действия после успешной проверки nonce
    }
}

Какие действия выполняются после неуспешной проверки nonce?

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

add_action( 'check_ajax_referer', 'my_custom_nonce_error_action', 10, 2 );
function my_custom_nonce_error_action( $action, $result ) {
    if ( false === $result ) {
        // Действия после неуспешной проверки nonce
    }
}

Хук check_ajax_referer позволяет проверить валидность nonce в AJAX-запросах и обеспечить защиту от CSRF атак. Изменение сообщения об ошибке, выполнение действий после успешной или неуспешной проверки nonce — все это можно реализовать с помощью данного хука.

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

  • Функция wp_create_nonce(): генерирует уникальный «nonce» (число использование которого ограничено временем и действием) для использования в AJAX запросах.
  • Функция wp_verify_nonce(): проверяет правильность «nonce» значения, чтобы убедиться, что запрос является действительным и безопасным.
  • Функция wp_nonce_field(): генерирует скрытое поле формы, содержащее «nonce» значение, которое можно использовать для проверки подлинности данных при отправке формы.
  • Функция wp_referer_field(): генерирует скрытое поле формы, содержащее URL страницы, с которой был отправлен запрос, чтобы можно было проверить, что запрос отправлен с того же сайта.
  • Функция wp_nonce_url(): добавляет «nonce» значение к URL, чтобы обеспечить безопасность при переходе по ссылке.
  • Функция wp_nonce_ays(): выводит сообщение пользователю, если проверка «nonce» не прошла успешно, и предлагает повторить действие.
  • Класс WP_Ajax_Response: представляет AJAX ответ в виде объекта, который может быть использован для управления и обработки ответа.
Обсуждение