WordPress как на ладони
Готовые темы (шаблоны) для WordPress wordpress jino

wp_nonce_field() WP 2.0.4

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

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

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

Проверку созданных этой функцией полей нужно проводить функцией wp_verify_nonce().

Про одноразовые числа читайте в отдельной статье.

Работает на основе: wp_create_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(); ?>
выведет: <input type="hidden" id="_wpnonce" name="_wpnonce" value="5284708911" />
<input type="hidden" name="_wp_http_referer" value="/permalink" />

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

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

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

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

Код wp nonce field: wp-includes/functions.php WP 4.7.5

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

Cвязанные функции

Из метки: nonce (защита)

Еще из раздела: Защита

Http://www.tui.ru

Туры и путевки в болгарию http://www.tui.ru.

www.tui.ru

wp_nonce_field 2 комментария
  • Pavel cайт: plance.in.ua

    Здравствуй, Тимур!

    Подскажи пожалуйста, есть ли у тебя на сайте информация касательно валидации данных форм. Т.е. есть ли в WP готовые функции для проверки корректности введенных данных, такие как email, длина строк, проверка ее на пустоту, и т.п. С возможностью вывести соответствующее сообщение. Т.е. тем, чем обладают все современные фреймворки.

    p.s. спасибо большое за твой труд! лучший сайт по wordpress на русском!

    Ответить1.5 года назад #

Здравствуйте, !

Ваш комментарий