✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Надсилання безпечних запитів Ajax у WordPress (з Nonces)

13

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

  • Можливо, це додаток,
  • Можливо, час не дозволяє створити необхідні кінцеві точки,
  • Можливо, вам зручніше використовувати admin-ajax,
  • І так далі.

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

Правильний живий знімок проводів, що передають ваш запит 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. Він визначає об’єкт, який ми можемо використовувати в нашому коді JavaScript під назвою acme_ajax_object, і визначає дві властивості.
  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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі