У вступі згадувалося, що для перевірки прав є два підходи: це «Перевірка прав користувача» і доповнюють цю перевірку «Одноразові числа».
«Одноразові числа» - це такий собі токен в WordPress - випадково створена рядок з 10 знаків, наприклад bec698e7ea. яку можна повторити протягом короткого проміжку часу (24 години). Тобто створити і перевірити це число можна тільки протягом 24 години, після цього, та ж сама операція поверне вже інше «число».
Детальніше див. Опис функції wp_create_nonce ()
Приклад роботи Nonce
Ми зайшли в адмінку, в настройки, при заході згенерувати форма, де одне з полів - це таке «nonce значення». Ми змінили дані і натиснули кнопку «зберегти». При обробці даних, крім перевірки прав доступу (current_user_can ()) WordPress перевіряє чи сходиться nonce число. Якщо nonce не сходиться, то запит на збереження даних провалиться.
Ми не помічаємо цих nonce перевірок, тому що зазвичай все відбувається швидко. Але якщо, наприклад, зайти на сторінку налаштувань в адмінку, почекати 24 години і тільки потім спробувати зберегти дані, то внесені зміни не будуть збережені, тому що nonce перевірка не буде пройдена.
Навіщо потрібна перевірка «одноразовими числами»?
Змусити щоб браузер адміністратора пройшов по такому посиланню, можна різними способами.
Наприклад, створити сторінку і в ній використовувати такий код:
Або наприклад, написати лист адміністратору сайту, в яке підсунути зовні нешкідливу посилання.
Щоб, неможливо було виконати таку хитрість, існують «одноразові числа» (nonce захист).
Nonce Функції
Для управління одноразовими числами в WordPress є п'ять функції:
- wp_nonce_field ($ action, $ name) - створює input поле з одноразовим числом для форми.
- wp_create_nonce ($ action) - просто створює одноразове число у вигляді рядка.
- wp_nonce_url ($ url, $ action) - додає nonce в переданий URL у вигляді параметра запиту? _wpnonce = 9d6bd884a1
- wp_verify_nonce ($ nonce, $ action) - перевіряє одноразове число.
- check_ajax_referer () - перевіряє Ajax запит, на відповідність nonce коду. Обриває роботу скрипта через die, якщо перевірка не пройдена.
Приклад використання Nonce захисту
Це приклад з розділу перевірка прав користувача. тільки до нього додається ще й nonce перевірка.
При створенні посилання, використовуємо wp_create_nonce (). щоб додати одноразове число до заслання:
Аргумент, що передається функції гарантує, що одноразове число унікально для даного конкретного дії.
Потім, при обробці запиту, перевіряємо одноразове число:
Перевірка referer
Крім Nonce є ще перевірка referer. Вона доповнює nonce захист. Це незалежна перевірка і працює вона так: з форми передається параметр, де вказано HTTP_REFERER. при обробці форми цей параметр перевіряється і якщо запит прийшов не з очікуваної сторінки, то перевірка провалюється.
Для referer перевірки в WordPress є 3 функції:
висновок
При виконанні будь-якої операції перетворення даних, наприклад, збереження налаштувань плагіна або видалення даних плагіна, завжди слід переконатися, що у користувача є право здійснювати операцію (перевірка прав) і що виконується запит чи не застарів (nonce перевірка).
Creative sites for creative people ★ Digital marketing