check_ajax_referer() WP 2.0.3

Перевіряє Ajax запит на відповідність коду nonce. Обриває роботу скрипта через die, якщо перевірку не пройдено.

За замовчуванням, шукає nonce код $_REQUEST[‘_ajax_nonce’] і $_REQUEST[‘_wpnonce’] .

Це init .

Заміна функції (перевизначення) — у плагіні можна створити функцію з такою самою назвою, тоді вона замінить поточну функцію.

Працює на основі:
wp_verify_nonce()

Хуки з функції

Повертає

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

Приклади

0

#1 Створення та перевірка nonce коду в AJAX запиті

В основному файлі встановлюємо так:

<?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_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Введено.

Код check_ajax_referer() WP 6.0.2

function check_ajax_referer( $action = -1, $query_arg = false, $die = true ) {
	if ( -1 == $action ) {
		_doing_it_wrong( __FUNCTION__, __( 'Ви повинні бути визначені для того, щоб бути здійсненим за допомогою першого параметра.' ), '4.7.0' );
	}

	$ nonce = '';

	if ( $query_arg && isset( $_REQUEST[ $query_arg ] ) ) {
		$nonce = $_REQUEST[ $query_arg ];
	} elseif ( isset( $_REQUEST['_ajax_nonce'] ) ) {
		$nonce = $_REQUEST['_ajax_nonce'];
	} elseif ( isset( $_REQUEST['_wpnonce'] ) ) {
		$nonce = $_REQUEST['_wpnonce'];
	}

	$result = wp_verify_nonce( $nonce, $action );

	/**
	 * Fires once the Ajax request has been validated or not.
	 *
	 * @ Since 2.1.0
	 *
	 * @param string $action The Ajax nonce action.
	 * @param false|int $result False if nonce is invalid, 1 if the nonce valid and generated between
	 * 0-12 hours ago, 2 if nonce valid and generated between 12-24 hours ago.
	 */
	do_action( 'check_ajax_referer', $action, $result );

	if ( $die && false === $result ) {
		if ( wp_doing_ajax() ) {
			wp_die(-1, 403);
		} else {
			die('-1');
		}
	}

	return $result;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *