wp_nonce_field

Выводит проверочное (защитное, одноразовое) скрытое поле для формы.

Проверочное (nonce) поле нужно для проверки передаваемых данных формы, чтобы убедиться, что данные были отправлены с текущего сайта, а не от куда-то еще. Это поле не дает абсолютной защиты, но защищает в большинстве случаев. Использовать проверочное поле в формах необходимо.

Если нужно усилить защиту, то рекомендуется указать параметры $action (будет использован как ключ для создания уникального сочетания знаков) и $name. Обычно функция просто вызывается без указания параметров и этого часто достаточно – будет использоваться стандартный ключ и название поля, но если хакеры узнают подход, то им не сложно будет подобрать проверочное поле.

Проверку переданных полей формы с помощью wp_nonce_field() нужно проверять функцией wp_verify_nonce().

✈ 1 раз = 0.00011с = быстро | 50000 раз = 1.57с = быстро

Хуков нет.

Возвращает

Выводит на экран html код проверочного поля формы.

Использование

wp_nonce_field( $action, $name, $referer, $echo );
$action(строка)
Уникальный идентификатор для создаваемого поля. Имя именно этого проверочного поля.
По умолчанию: -1
$name(строка)
Параметр аттрибута name у HTML тега input. Указав имя поля, его можно будет получить через $_POST[$name].
По умолчанию: “_wpnonce”
$referer(логический)
По умолчанию: true или 1 – вместе с nonce полем добавляется еще одно скрытое поле referer (адрес страницы, с которой отправляются данные формы). Такое поле можно выводить отдельно функцией wp_referer_field().
По умолчанию: true
$echo(логический)
false – вернет данные в переменную, для дальнейшей обработки.
По умолчанию: true

Примеры

#1. Защита данных формы

Обычный пример защиты данных формы: используем такой код в коде формы:

<?php wp_nonce_field(); ?>


<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
{
   // обрабатываем данные
}

#3. Проверка передаваемых данных формы в админке

Если вы отправляете и принимаете данные формы внутри админ-панели, их можно проверять функций: check_admin_referer(). При неудаче, check_admin_referer() автоматически выведет предупреждение (die), т.е. не надо указывать, что делать, если данные не прошли проверку:

<?php
if ( !empty($_POST) && check_admin_referer('name_of_my_action','name_of_nonce_field') )
{
   // обрабатываем данные
}

Код из


wp-includes/functions.php

WP 4.7.2

<?php
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;
}