✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Отправка безопасных запросов Ajax в WordPress (с одноразовыми номерами)

15

Я знаю, что REST API — это огромная тема для разговоров в WordPress прямо сейчас, и это правильно, но все еще бывают случаи, когда нам приходится использовать admin-ajax (как это стало известно) по разным причинам.

  • Возможно, это приложение,
  • Возможно, время не позволяет создать необходимые конечные точки,
  • Возможно, вам удобнее admin-ajax,
  • И так далее.

Независимо от ваших причин, по которым вы его используете (что я все еще делаю, независимо от того, что это работает), я думаю, важно убедиться, что мы отправляем безопасные запросы Ajax в WordPress, используя одноразовые номера, как если бы вы отправляли традиционные данные формы. .

Законный, живой снимок проводов, несущих ваш запрос Ajax.

Если вы будете искать в Интернете результаты того, как это сделать, вы найдете множество ответов, и это будет просто еще одна капля в море.

Но если вам любопытен рецепт, как с этим справиться, вот как я это делаю каждый раз.

Безопасные запросы Ajax в WordPress

Процесс отправки безопасных запросов Ajax для WordPress следует следующей процедуре:

  1. поставьте в очередь свой файл JavaScript и используйте wp_localize_script ,
  2. убедитесь, что ваш JavaScript отправляет одноразовый номер безопасности,
  3. проверьте значение безопасности в обратном вызове и обработайте его соответствующим образом.

С учетом сказанного, вот несколько основных моментов для каждого из вышеперечисленных, которые, мы надеемся, помогут вам написать более безопасный код на основе Ajax.

1 Поставьте JavaScript в очередь, локализуйте свой скрипт

Я знаю, что это кажется странным первым шагом, учитывая, что вы должны написать его до того, как поставите его в очередь. И вы должны, конечно. Но в этом посте я хотел показать необходимый код, прежде чем переходить к деталям.

Есть несколько способов поставить в очередь admin-ajax.php, но я следую этому процессу как для постановки в очередь моего файла, так и для добавления admin-ajax.php:

Обратите внимание, что в приведенном выше коде вызов wp_enqueue_script выглядит именно так, как вы и ожидали.

Но wp_localize_script немного отличается. Вот что он делает:

  1. Он следует за вызовом сценария постановки в очередь (и порядок имеет значение),
  2. он использует тот же идентификатор, а именно acme-security ,
  3. Он определяет объект acme_ajax_object, который мы можем использовать в нашем коде JavaScript, и определяет два свойства.
  4. Свойство ajax_url поддерживает путь к admin-ajax.php.
  5. Свойство безопасности поддерживает значение, возвращаемое wp_create_nonce.

Итак, как мы можем использовать все это в контексте нашего JavaScript?

2 Использование этой информации в JavaScript

Во-первых, при вызове Ajax нам нужно убедиться, что мы используем  свойство ajax_url объекта, который мы определили в приведенном выше коде. То есть URL-адрес запроса должен быть отправлен на acme_ajax_object.ajax_url.

Затем вы определяете функцию, которую хотите вызвать. В данном случае это get_custom_date, который мы рассмотрим чуть позже.

Но самая важная часть идет дальше: затем мы обязательно отправляем значение безопасности, которое поддерживается свойством безопасности acme_ajax_object.

$.get( acme_ajax_object.ajax_url, { action: 'get_custom_data', security: acme_ajax_object.security }, function( response) { if (undefined !== response.success && false === response.success) { return; } // Parse your response here. });

Обратите внимание, что в функции ответа мы проверяем, правильно ли получен ответ, обрабатываем его надлежащим образом, а затем продвигаемся вперед с нашим кодом.

Так как же выглядит серверный код для этого?

3 Проверка безопасности

Затем в вашей функции обратного вызова (которую мы соответствующим образом назвали get_custom_data) нам нужно сначала проверить значение безопасности, прежде чем делать что-либо еще.

Если значение проходит, все готово; в противном случае нам нужно отправить ошибку.

Обратите внимание, что когда мы вызываем check_ajax_referer, мы используем ключ значения, определенный в wp_create_nonce, и имя свойства объекта, которое мы определили на первом шаге.

Если это не подтверждается, мы отправляем ошибку JSON, которую мы можем прочитать в JavaScript, как мы видели выше. Это всегда должно быть первым шагом перед реальной работой.

Если все в порядке, мы можем идти.

Это действительно безопасно?

Это неизбежный вопрос, не так ли? Честно говоря, я не хочу обещать, что это абсолютно надежно, потому что я не эксперт по безопасности.

Но наличие значения nonce, которое будет использовать встроенные функции безопасности WordPress, лучше, чем слепая отправка данных без возможности проверить источник того, что отправляется.

Естественно, вам также необходимо дезинфицировать данные перед их запросом, использованием, возможным сохранением и так далее. Но это содержание для другого поста.

Вместо этого это дает рецепт для того, чтобы убедиться, что вы отправляете безопасные запросы Ajax в WordPress.

Источник записи: tommcfarlin.com

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