- Описание хука
- Примеры использования
- Проверка валидности Ajax запроса
- Генерация Ajax nonce
- Проверка времени генерации Ajax nonce
- Обработка невалидного Ajax nonce
- Обработка валидного Ajax nonce
- Вопросы и ответы
- Почему мой Ajax запрос не проходит проверку?
- Как правильно использовать хук check_ajax_referer?
- Как установить срок действия генерируемого nonce?
- Как проверить валидность nonce, сгенерированного более 24 часов назад?
- Как изменить сообщение об ошибке при невалидном nonce?
- Как использовать хук check_ajax_referer для защиты от CSRF атак?
- Какие действия выполняются после успешной проверки nonce?
- Какие действия выполняются после неуспешной проверки nonce?
- Связанные элементы
Описание хука
Хук «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 ответ в виде объекта, который может быть использован для управления и обработки ответа.