wp_nonce_field()
Получает или выводит скрытое одноразовое поле (nonce) для формы.
Одноразовое поле (nonce) нужно для проверки передаваемых данных формы, чтобы убедиться, что данные были отправлены с текущего сайта, а не от куда-то еще. Такое поле не дает полной защиты, но защищает в большинстве случаев. Использовать проверочное поле в формах обязательно!
Если нужно усилить защиту, то рекомендуется указать параметры $action (будет использован как ключ для создания уникального сочетания знаков) и $name. Если функцию вызывать без параметров, то будет использоваться стандартный ключ и название поля, но если «хакеры» узнают базовый nonce код, то его не сложно будет использовать для атаки. Поэтому для важных форм рекомендуется указывать параметры $action и $name.
Проверять значение поля, созданного этой функцией, нужно с помощью wp_verify_nonce().
Про одноразовые числа читайте в отдельной статье.
Хуков нет.
Возвращает
Строку
. Выводит на экран 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 Усиление защиты
Для лучшей защиты, можно указать аргументы $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 { // обрабатываем данные }
#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' ); // работаем }
#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 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; }