check_ajax_referer()
Проверяет Ajax запрос на соответствие nonce коду. Обрывает работу скрипта через die, если проверка не пройдена.
По умолчанию, ищет nonce код в $_REQUEST['_ajax_nonce'] и $_REQUEST['_wpnonce'].
Pluggable функция — эту функцию можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.
Замена функции (переопределение) — в must-use или обычном плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.
Хуки из функции
Возвращает
int|false
. False если nonce код невалидный, 1 если nonce код валидный и был создан 0-12 часов назад, 2 если 12-24 часа назад.
Использование
check_ajax_referer( $action, $query_arg, $die );
- $action(строка)
- Ключ, который был указан при создании nonce кода. Указывается при создании nonce, например:
wp_create_nonce("my_action")
.
По умолчанию: -1 - $query_arg(строка)
- Название ключа массива $_REQUEST, где находится значение nonce строки. Обратите внимание, что сюда нужно указать название ключа, а не само значение nonce. Если ничего не указать, то будут проверены значения $_REQUEST['_ajax_nonce'] и $_REQUEST['_wpnonce'] в поисках nonce кода.
По умолчанию: false - $die(логический)
Обрывать ли обработку скрипта в случает неудачной проверки nonce кода:
- true - при неудачной проверке nonce, выполнение скрипта будет прервано и функция выведет на экран '-1'. Если это ajax запрос, то также будет установлен код ответа 403 (доступ запрещен).
- false - не прервет обработку и функция вернет false/Int, в зависимости от результата проверки.
По умолчанию: true
Примеры
#1 Создание и проверка nonce кода в AJAX запросе
В основном файле устанавливаем nonce так:
<?php // установим Nonce $ajax_nonce = wp_create_nonce("my-special-string"); ?> <script type="text/javascript"> jQuery(document).ready(function($){ var data = { action: 'my_action', security: '<?php echo $ajax_nonce; ?>', my_string: 'Hello World!' }; $.post(ajaxurl, data, function(response) { alert("Response: " + response); }); }); </script>
Лучше использовать wp_localize_script() для передачи nonce кода в JS, а для JS использовать отдельный файл, который загружается через wp_enqueue_script().
Затем, проверяем nonce строку при обработке Ajax запроса:
add_action( 'wp_ajax_my_action', 'my_action_function' ); function my_action_function() { check_ajax_referer( 'my-special-string', 'security' ); echo $_POST['my_string']; die; }
Мы создали nonce строку с идентификатором my-special-string
и при обработке её проверили.
Чтобы не задавать второй аргумент 'security' у функции check_ajax_referer() достаточно назвать nonce: _wpnonce или _ajax_nonce.
Список изменений
С версии 2.0.3 | Введена. |