check_admin_referer() WP 1.2.0

Перевіряє, чи надіслано поточний запит зі сторінки адмінки і чи правильний вказаний код nonce. У разі помилки обриває роботу скрипта (die).

Якщо перевірка не буде пройдена, функція перериває роботу PHP скрипта (die) і виводить повідомлення: “Are you sure you want to do this?” із посиланням на попередню сторінку. Читайте опис функції: wp_nonce_ays() .

Примітка щодо цієї функції: Якщо nonce правильний, то немає необхідності перевіряти реферер. Nonce коди використовуються багато в чому тому, що не можна довіряти параметру referrer. Так можна сказати, що nonce повністю замінює перевірку реферера. Функція перевіряє реферер тільки тоді, коли не вказано параметр $action (не вказано nonce для перевірки). В даний час перевірка реферера дуже рідко зустрічається.

Зі сказаного вище, у функції вийшла невдала назва, тому що вона майже ніколи не перевіряє реферер. Було б краще назвати її якось check_nonce() , але зробити це не дозволяє зворотна сумісність зі старими версіями тем і плагінів.

Є ще аналогічна функція для перевірки AJAX запиту: check_ajax_referer()

Це init .

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

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

Повертає

int|false.

  • false– Неправильний nonce токен.
  • 1– nonce правильний і створений 0-12 годин тому
  • 2– nonce правильний і створений 12-24 години тому.

Використання

<?php check_admin_referer( $action, $query_arg ); ?>
$action
(рядок)
Ідентифікатор nonce перевірки (перший аргумент функції wp_nonce_field).


За замовчуванням: -1
$query_arg
(рядок)
Назва параметра запиту, що має значення nonce, тобто. де шукати код перевірки.


За замовчуванням: ‘_wpnonce’

Приклади

0

#1 Базовий приклад використання

<?php check_admin_referer( 'bcn_admin_options' ); ?>

Виконання сценарію буде перервано, якщо запит був не зі сторінки адмінки.

0

#2 Додавання та перевірка коду перевірки

Приклад того, як використовувати цю функцію під час написання плагіна. Додаємо код перевірки функцією wp_nonce_field()

<form method="post">
   <!-- дані форми ... -->
   <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?>
</form>

Тепер, на сторінці де приймаються передані дані, перевіряємо код перевірки та обробляємо запит, якщо перевірка пройдена:

function my_handler_function(){

	// Переконаємося, що запит не прострочений
	// При помилці, виведе повідомлення та перерве роботу PHP.
	check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );

	// працюємо
}

Іноді для зрозумілості коду можна записати з if:

if( check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' ) ) {
   // обробляємо отримані дані
}

список змін

З версії 1.2.0Введено.
З версії 2.5.0$query_arg parameter був added.

Код check_admin_referer() WP 6.0.2

function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
	if ( -1 === $action ) {
		_doing_it_wrong( __FUNCTION__, __( 'You should specify an action to be verified by using the first parameter.' ), '3.2.0' );
	}

	$adminurl = strtolower( admin_url() );
	$referer = strtolower( wp_get_referer() );
	$result = isset( $_REQUEST[ $query_arg ] ) ? wp_verify_nonce( $_REQUEST[ $query_arg ], $action ) : false;

	/**
	 * Fires once the admin request має бути validated or not.
	 *
	 * @ Since 1.5.1
	 *
	 * @param string $action The 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_admin_referer', $action, $result );

	if ( ! $result && ! ( -1 === $action && strpos( $referer, $adminurl ) === 0 ) ) {
		wp_nonce_ays($action);
		die();
	}

	return $result;
}

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

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