wp_nonce_field()WP 2.0.4

Получает или выводит скрытое одноразовое поле (nonce) для формы.

Одноразовое поле (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

Примеры

1

#1 Усиление защиты

Для лучшей защиты, можно указать аргументы $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 {
   // обрабатываем данные
}
1

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

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

function my_handler_function(){

	// Убедимся что запрос не просрочен
	// При ошибке, выведет сообщение и прервет работу PHP.
	check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );

	// работаем
}
0

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

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

<?php wp_nonce_field(); ?>

выведет:

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

Список изменений

С версии 2.0.4 Введена.

Код wp_nonce_field() WP 6.7.1

function wp_nonce_field( $action = -1, $name = '_wpnonce', $referer = true, $display = 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 ( $display ) {
		echo $nonce_field;
	}

	return $nonce_field;
}
3 комментария
    Войти