wp_nonce_field() WP 2.0.4

Отримує або виводить приховане одноразове поле для форми.

Одноразове поле (nonce) потрібно для перевірки даних форми, щоб переконатися, що дані були відправлені з поточного сайту, а не від кудись ще. Таке поле не дає повного захисту, але захищає здебільшого. Використовувати перевірочне поле у ​​формах обов’язково!

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

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

Про одноразові числа читайте в окремій статті .

Працює на основі:
wp_create_nonce()
Основа для:
settings_fields()
1 раз – 0.00011 сек
(швидко) | 50000 разів – 1.57 сек
(швидко)

Хуків немає.

Повертає

Строку. Виводить на екран HTML код перевірочного поля форми.

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

wp_nonce_field( $action, $name, $referer, $echo );
$action
(рядок)
Унікальний ідентифікатор для поля, що створюється. Ім’я саме цього перевірного поля.


За замовчуванням: -1
$name
(рядок)
Параметр атрибута
name у HTML тега
input . Значення поля можна буде отримати із змінної
$_POST[$name] .


За замовчуванням: “_wpnonce”
$referer
(логічний)
Разом з nonce полем додається ще одне приховане поле referer (адреса сторінки, з якої надсилаються дані форми). Таке поле можна виводити окремо функцією
wp_referer_field() .


Типово: true
$echo
(логічний)
false – поверне дані до змінної, для подальшої обробки.


Типово: true

Приклади

0

#1 Захист даних форми

Звичайний приклад захисту даних форми: використовуємо такий код у коді форми:

<?php wp_nonce_field(); ?>

виведе:

<input type="hidden" id="_wpnonce" name="_wpnonce" value="5284708911" />
<input type="hidden" name="_wp_http_referer" value="/permalink" />
0

#2 Посилення захисту

Для кращого захисту можна вказати аргументи $action і $name :

<form method="post">
   <!-- some inputs here ... -->
   <?php wp_nonce_field('name_of_my_action','name_of_nonce_field'); ?>
</form>

Після того, як дані форми були відправлені, при обробці даних потрібно перевірити код nonce за допомогою wp_verify_nonce() :

<?php
if ( empty($_POST) || ! wp_verify_nonce( $_POST['name_of_nonce_field'], 'name_of_my_action') ){
   print 'Вибачте, перевірочні дані не відповідають.';
   exit;
}
else {
   // обробляємо дані
}
0

#3 Перевірка даних, що передаються, форми в адмінці

Якщо ці форми приймаються всередині адмін-панелі, їх можна перевіряти функціями: check_admin_referer() . При невдачі, check_admin_referer() автоматично виведе повідомлення та перерве роботу php (die). Тобто. не треба вказувати, що робити, якщо дані не пройшли перевірку:

function my_handler_function(){

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

	// працюємо
}

список змін

З версії 2.0.4Введено.

Код wp_nonce_field() WP 6.0.2

function wp_nonce_field( $action = -1, $name = '_wpnonce', $referer = true, $echo = true ) {
	$name = esc_attr($name);
	$nonce_field = '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . wp_create_nonce( $action ) .

	if ($ referer) {
		$nonce_field .= wp_referer_field( false );
	}

	if ($ echo) {
		echo $nonce_field;
	}

	return $nonce_field;
}

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

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