Intereting Posts
Публикация сообщения об ошибке wp_insert_post () или аналогичный для пользовательского типа сообщения Страницы, кроме Домашней страницы, не отображаются, даже если URL-адрес хорош Сообщение об ошибке «Параметры API» Загрузка изображения с внешнего интерфейса с помощью иконок Возможно ли получить текущий входной IP-адрес администратора? Перемещение значения из одной мета-ключа в другую Какой плагин следует использовать для бронирования событий и получения платежей? WP 3.3 Как добавить элементы меню в панель администратора? Скрыть ссылки категории, если в категориях нет ничего – элемент подменю Главная Навигация Как получить выбранную таксономию или идентификатор категории при использовании пользовательского ходока? Используя версии jQuery, TinyMCE, …? Более одного TinyMCE (wp_editor) с разными значениями $ settings ломается wp_insert_post позволяют пользователям отправлять сообщения без регистрации … meta_query проверяет, установлены ли оба значения

Nonces и Cache

Понятно, что запросы форм и запросы AJAX, особенно разумные, нуждаются в «nonces», чтобы избежать определенных эксплойтов. Однако при интенсивном использовании систем кэширования становится сложнее их генерировать и выводить свежие nonces вместо кешированных.

Чтобы решить эту проблему, я подумал о создании функции AJAX, которая возвращает новое сообщение nonce, которое необходимо запросить до отправки формы. Это nonce будет добавлено к форме как скрытое поле.

Считаете ли вы, что это безопасный подход?

Функция PHP, чтобы вернуть новую строку:

function create_nonce() { return wp_create_nonce('my-nonce'); } add_action('wp_ajax_create_nonce', 'create_nonce'); add_action('wp_ajax_nopriv_create_nonce', 'create_nonce'); 

Отправить форму ( request () – это настраиваемая функция, которую я создал, чтобы легко выполнить запросы ajax):

 $('form').on('submit', function(e){ e.preventDefault(); var $form = $(this); request('create_nonce', function(nonce){ // Append the fresh nonce to the form $form.append('<input type="hidden" name="nonce" value="'+nonce+'">'); // Proceed with the form submission... }); });