Когда вы обрабатываете AJAX-запросы в WordPress, важно убедиться, что запрос пришёл с вашего сайта, а не от злоумышленника. Именно для этого существует функция check_ajax_referer() — она проверяет одноразовый токен (nonce) и блокирует подозрительные обращения до выполнения любой логики.

Синтаксис

check_ajax_referer( $action = -1, $query_arg = false, $die = true )

Параметры функции

$action — строка или число. Это ключ действия, который вы указывали при создании nonce через wp_create_nonce(). Связывает токен с конкретной операцией.

$query_arg — строка. Название поля, в котором передаётся nonce. Если не указать, WordPress сам проверит поля _ajax_nonce и _wpnonce.

$die — boolean. Определяет поведение при неудачной проверке. При значении true (по умолчанию) скрипт останавливается через wp_die(). При false — функция возвращает false, 1 или 2, и вы можете обработать ошибку самостоятельно.

Пример: создаём nonce на стороне PHP и передаём в JS

Сначала генерируем токен и передаём его в JavaScript через встроенный скрипт:

$ajax_nonce = wp_create_nonce( 'true_security' );

echo '<script>
jQuery( function( $ ) {
    var data = {
        action: "true_action",
        security: "' . $ajax_nonce . '",
        true_str: "Привет!"
    };
    $.post( ajaxurl, data, function( response ) {
        console.log( "Ответ с сервера: " + response );
    });
});
</script>';

Пример: проверяем nonce в AJAX-обработчике

В обработчике первым делом вызываем проверку — до выполнения каких-либо действий:

add_action( 'wp_ajax_true_action', 'true_ajax_cb' );

function true_ajax_cb() {
    check_ajax_referer( 'true_security', 'security' );
    echo $_POST['true_str'];
    die;
}

Здесь 'true_security' — ключ действия, совпадающий с тем, что указали при создании nonce. Поле 'security' — имя параметра, в котором фронтенд отправил токен.

Зачем это нужно

Без проверки nonce любой сторонний сайт может отправить запрос к вашему AJAX-обработчику от имени авторизованного пользователя — это CSRF-атака. Одна строка check_ajax_referer() в начале обработчика надёжно закрывает эту уязвимость.

 

Разработка сайтов на Wordpress