- Описание функции
- Примеры использования
- Проверка валидности Ajax-запроса
- Генерация и проверка действительности nonce-кода
- Остановка выполнения кода при неверном nonce-коде
- Вопросы и ответы
- Как проверить валидность nonce в AJAX-запросе?
- Как использовать check_ajax_referer() для защиты от CSRF-атак?
- Как изменить действие (action) в функции check_ajax_referer()?
- Как использовать кастомный query_arg в функции check_ajax_referer()?
- Как отключить раннюю остановку (early stopping) в функции check_ajax_referer()?
- Как проверить валидность nonce, сгенерированного более 24 часов назад?
- Как проверить валидность nonce, сгенерированного менее 12 часов назад?
- Как проверить валидность nonce без использования функции check_ajax_referer()?
- Связанные элементы
Описание функции
Функция check_ajax_referer() используется для проверки Ajax-запроса с целью предотвращения обработки запросов, внешних для блога. Она проверяет переданный в запросе nonce (число использование только один раз), чтобы убедиться, что запрос был отправлен с действительной страницы и не был подделан.
Использование
check_ajax_referer( int|string $action = -1, false|string $query_arg = false, bool $stop = true ): int|false Функция check_ajax_referer() принимает три параметра: $action, $query_arg и $stop. Она возвращает целое число или false.
Параметры:
$action(int|string) — Необязательный параметр. Действие nonce. По умолчанию: -1.$query_arg(false|string) — Необязательный параметр. Ключ для проверки nonce в $_REQUEST (начиная с версии 2.5). Если false, значения $_REQUEST будут проверяться на наличие ‘_ajax_nonce’ и ‘_wpnonce’ (в таком порядке). По умолчанию: false.$stop(bool) — Необязательный параметр. Определяет, нужно ли прекратить выполнение, если nonce не может быть проверен. По умолчанию: true.
Функция возвращает целое число или false. 1, если nonce действителен и был сгенерирован в пределах последних 0-12 часов, 2, если nonce действителен и был сгенерирован в пределах последних 12-24 часов. False, если nonce недействителен.
<?php
// Проверка Ajax-запроса
check_ajax_referer( 'my_action', 'nonce' );
?> В данном примере функция check_ajax_referer() проверяет Ajax-запрос на наличие действительного nonce с именем ‘my_action’ и ключом ‘nonce’ в $_REQUEST.
Примеры использования
Проверка валидности Ajax-запроса
/**
* Проверяет Ajax-запрос для предотвращения обработки запросов вне блога.
*
* @param int|string $action Необязательный действующий nonce. По умолчанию: -1
* @param false|string $query_arg Необязательный ключ для проверки nonce в $_REQUEST (начиная с 2.5).
* Если false, значения $_REQUEST будут проверены на наличие '_ajax_nonce' и '_wpnonce' (в таком порядке).
* По умолчанию: false
* @param bool $stop Необязательный параметр, указывающий, нужно ли прекратить выполнение кода, если nonce не может быть проверен.
* По умолчанию: true
*
* @return int|false 1, если nonce действительный и сгенерирован в пределах 0-12 часов назад,
* 2, если nonce действительный и сгенерирован в пределах 12-24 часов назад.
* False, если nonce недействительный.
*/
function check_ajax_referer( $action = -1, $query_arg = false, $stop = true ) {
// Реализация функции
}
Генерация и проверка действительности nonce-кода
/**
* Генерирует и проверяет действительность nonce-кода для Ajax-запросов.
*
* Пример генерации nonce-кода:
* <code>
* $nonce = wp_create_nonce( 'my-nonce-action' );
* </code>
*
* Пример проверки действительности nonce-кода:
* <code>
* if ( check_ajax_referer( 'my-nonce-action', 'nonce' ) ) {
* // Код, который будет выполнен, если nonce-код действителен
* } else {
* // Код, который будет выполнен, если nonce-код недействителен
* }
* </code>
*
* @param int|string $action Необязательный действующий nonce. По умолчанию: -1
* @param false|string $query_arg Необязательный ключ для проверки nonce в $_REQUEST (начиная с 2.5).
* Если false, значения $_REQUEST будут проверены на наличие '_ajax_nonce' и '_wpnonce' (в таком порядке).
* По умолчанию: false
* @param bool $stop Необязательный параметр, указывающий, нужно ли прекратить выполнение кода, если nonce не может быть проверен.
* По умолчанию: true
*
* @return int|false 1, если nonce действительный и сгенерирован в пределах 0-12 часов назад,
* 2, если nonce действительный и сгенерирован в пределах 12-24 часов назад.
* False, если nonce недействительный.
*/
function check_ajax_referer( $action = -1, $query_arg = false, $stop = true ) {
// Реализация функции
}
Остановка выполнения кода при неверном nonce-коде
/**
* Проверяет Ajax-запрос для предотвращения обработки запросов вне блога и прекращает выполнение кода при неверном nonce-коде.
*
* Пример использования:
* <code>
* check_ajax_referer( 'my-nonce-action', 'nonce', true );
* </code>
*
* @param int|string $action Необязательный действующий nonce. По умолчанию: -1
* @param false|string $query_arg Необязательный ключ для проверки nonce в $_REQUEST (начиная с 2.5).
* Если false, значения $_REQUEST будут проверены на наличие '_ajax_nonce' и '_wpnonce' (в таком порядке).
* По умолчанию: false
* @param bool $stop Необязательный параметр, указывающий, нужно ли прекратить выполнение кода, если nonce не может быть проверен.
* По умолчанию: true
*
* @return int|false 1, если nonce действительный и сгенерирован в пределах 0-12 часов назад,
* 2, если nonce действительный и сгенерирован в пределах 12-24 часов назад.
* False, если nonce недействительный.
*/
function check_ajax_referer( $action = -1, $query_arg = false, $stop = true ) {
// Реализация функции
}
Вопросы и ответы
Как проверить валидность nonce в AJAX-запросе?
Для проверки валидности nonce в AJAX-запросе в WordPress используется функция check_ajax_referer(). Она позволяет убедиться, что запрос является внутренним для блога и предотвратить обработку запросов, которые пришли извне.
if ( check_ajax_referer( 'my_ajax_action', 'nonce', false ) ) {
// Код для обработки AJAX-запроса
} else {
// Обработка невалидного nonce
} Как использовать check_ajax_referer() для защиты от CSRF-атак?
Функция check_ajax_referer() является надежным инструментом для защиты от CSRF-атак (межсайтовая подделка запроса). Она проверяет, что nonce в запросе совпадает с ожидаемым значением, сгенерированным на сервере.
Пример использования:
add_action( 'wp_ajax_my_ajax_action', 'my_ajax_callback' );
function my_ajax_callback() {
if ( check_ajax_referer( 'my_ajax_action', 'nonce', false ) ) {
// Код для обработки AJAX-запроса
} else {
// Обработка невалидного nonce
}
} Как изменить действие (action) в функции check_ajax_referer()?
Функция check_ajax_referer() позволяет изменить действие (action), которое используется для генерации и проверки nonce. По умолчанию, действие равно -1.
Пример использования с измененным действием:
if ( check_ajax_referer( 'my_custom_action', 'nonce', false ) ) {
// Код для обработки AJAX-запроса
} else {
// Обработка невалидного nonce
} Как использовать кастомный query_arg в функции check_ajax_referer()?
Функция check_ajax_referer() также позволяет использовать кастомный query_arg для проверки nonce в $_REQUEST. По умолчанию, функция проверяет значения ‘_ajax_nonce’ и ‘_wpnonce’.
Пример использования с кастомным query_arg:
if ( check_ajax_referer( 'my_ajax_action', 'my_custom_nonce', false ) ) {
// Код для обработки AJAX-запроса
} else {
// Обработка невалидного nonce
} Как отключить раннюю остановку (early stopping) в функции check_ajax_referer()?
Функция check_ajax_referer() предназначена для проверки Ajax-запроса и предотвращения обработки запросов, которые не относятся к блогу. По умолчанию, если nonce не прошел проверку, функция останавливает выполнение скрипта. В некоторых случаях может потребоваться отключить эту раннюю остановку.
Для отключения ранней остановки в функции check_ajax_referer() необходимо установить параметр $stop в значение false. Например:
check_ajax_referer( 'my_action', false, false );
Как проверить валидность nonce, сгенерированного более 24 часов назад?
Функция check_ajax_referer() возвращает значение 2, если nonce является валидным и был сгенерирован более 12 часов назад, но менее 24 часов назад. Если требуется проверить валидность nonce, сгенерированного более 24 часов назад, необходимо использовать другой метод.
Для проверки валидности nonce, сгенерированного более 24 часов назад, можно использовать функцию wp_verify_nonce(). Например:
$nonce = $_POST['nonce'];
if ( wp_verify_nonce( $nonce, 'my_action' ) ) {
// Действия при валидном nonce
} else {
// Действия при невалидном nonce
}
Как проверить валидность nonce, сгенерированного менее 12 часов назад?
Функция check_ajax_referer() возвращает значение 1, если nonce является валидным и был сгенерирован менее 12 часов назад. Если требуется проверить валидность nonce, сгенерированного менее 12 часов назад, можно использовать функцию wp_verify_nonce() с параметром $lifetime равным 43200 (12 часов в секундах). Например:
$nonce = $_POST['nonce'];
if ( wp_verify_nonce( $nonce, 'my_action', 43200 ) ) {
// Действия при валидном nonce
} else {
// Действия при невалидном nonce
}
Как проверить валидность nonce без использования функции check_ajax_referer()?
Если требуется проверить валидность nonce без использования функции check_ajax_referer(), можно воспользоваться функцией wp_verify_nonce(). Например:
$nonce = $_POST['nonce'];
if ( wp_verify_nonce( $nonce, 'my_action' ) ) {
// Действия при валидном nonce
} else {
// Действия при невалидном nonce
}
Функция
check_ajax_referer()предназначена для проверки Ajax-запроса и предотвращения обработки запросов, которые не относятся к блогу. Она возвращает значения1или2, в зависимости от валидности nonce. В некоторых случаях может потребоваться отключить раннюю остановку или проверить валидность nonce, сгенерированного более 24 часов назад. Для этого можно использовать функциюwp_verify_nonce(). Таким образом, функцияcheck_ajax_referer()является важным инструментом для обеспечения безопасности веб-разработки на платформе WordPress.
Связанные элементы
- Функция
wp_ajax_{$action}: обрабатывает Ajax-запросы с указанным действием. - Функция
wp_ajax_nopriv_{$action}: обрабатывает Ajax-запросы с указанным действием для неавторизованных пользователей. - Функция
wp_send_json(): отправляет данные в формате JSON в ответ на Ajax-запрос. - Хук
wp_ajax_{$action}: вызывается при обработке Ajax-запросов с указанным действием. - Хук
wp_ajax_nopriv_{$action}: вызывается при обработке Ajax-запросов с указанным действием для неавторизованных пользователей. - Класс
WP_Ajax_Response: представляет Ajax-ответ в виде объекта.