Перейти до вмісту
🔒 Як вимкнути REST API у WordPress: 4 способи 2026

🔒 Як вимкнути REST API у WordPress: 4 способи 2026

Що таке REST API та навіщо його вимикати

REST API у WordPress — це вбудований інтерфейс, через який зовнішні застосунки читають і змінюють дані сайту. Запити йдуть до /wp-json/, відповідь надходить у JSON. З’явився у WordPress 4.7 і відтоді увімкнений за замовчуванням на кожному сайті.

Розробникам це зручно: мобільні застосунки, Headless-архітектура, інтеграції зі сторонніми сервісами. Але якщо ви не використовуєте нічого з переліченого, відкритий REST API залишається дірою. Користі нуль, ризики реальні.

Конкретні загрози:

  • Витік користувачів. Через /wp-json/wp/v2/users будь-хто отримує список логінів. Далі, підбір пароля.
  • Контент-скрапінг. Пости через /wp-json/wp/v2/posts забираються автоматом і перепубліковуються на чужих сайтах.
  • Зайве навантаження. Кожен REST-запит проходить повний цикл WordPress. Тисяча ботів за хвилину, і сайт лежить.

Нижче чотири способи закрити REST API: від плагіна в один клік до серверного блокування. Обирайте під свою ситуацію.

💡 Швидкий огляд:

  • Встановіть плагін Disable WP REST API: 30 000+ активних встановлень, налаштувань немає, працює одразу після активації.
  • Налаштуйте обмеження в Solid Security: якщо плагін безпеки вже стоїть на сайті, перемикач REST API знаходиться в розділі Advanced.
  • Додайте код у functions.php: для тих, хто не хоче ставити окремий плагін заради одного фільтра, сніпет на rest_authentication_errors.
  • Пропишіть правило в.htaccess: блокування на рівні сервера Apache, жорсткий метод без винятків.

Спосіб 1: Плагін Disable WP REST API, в один клік

Найпростіший і найбезпечніший метод. Плагін Disable WP REST API на WordPress.org робить рівно одну річ: закриває REST API для всіх, хто не ввійшов до адмінки. Авторизовані користувачі працюють як зазвичай, редактор блоків, інші плагіни, усе функціонує.

Встановлення: Плагіни → Додати новий, у пошуку «Disable WP REST API», встановити й активувати. Плагін важить 4 КБ і починає працювати одразу. Налаштувань немає.

Перевірка: вийдіть з адмінки та відкрийте в браузері https://вашсайт.ru/wp-json/. Побачите повідомлення: {"code":"rest_login_required","message":"REST API restricted to authenticated users.","data":{"status":401}}. Це означає, що REST API закритий для зовнішніх запитів.

Розробник плагіна, Jeff Starr, 15 років у WordPress, автор кількох книг на цю тему. Код відкритий, плагін оновлюється регулярно: на липень 2026, версія 2.6.8, протестований аж до WordPress 7.0.2.

Плюси:

  • Встановлення за хвилину, налаштувань немає
  • 4 КБ коду, не впливає на швидкість сайту
  • Не чіпає адмінку та редактор блоків
  • 30 000+ активних встановлень, рейтинг 4,8 на WordPress.org

Мінуси:

  • Блокує лише неавторизованих, зареєстрований користувач бачить REST API повністю
  • Немає гранулярних налаштувань у безплатній версії (Pro-версія REST Pro Tools додає фільтрацію за ролями та IP)

Ціна: Free. Pro-версія REST Pro Tools, на сайті розробника.

Завантажити: 🔗 Disable WP REST API на WordPress.org

Спосіб 2: Обмеження через Solid Security

Якщо у вас уже стоїть Solid Security (колишній iThemes Security), окремий плагін для REST API не потрібен. У налаштуваннях безпеки є готовий перемикач.

Шлях: Security → Settings → Advanced → WordPress REST API. У випадному списку оберіть «Restricted Access», REST API буде доступний лише авторизованим користувачам.

Заодно перевірте налаштування XML-RPC у тому ж розділі. Якщо не користуєтеся мобільним застосунком WordPress і не підключаєте Jetpack, вимкніть і його. Два інтерфейси, які рідко потрібні, а атакують їх часто.

Плюси:

  • Не потрібен окремий плагін, функція вже вбудована в Solid Security
  • Інтерфейс із поясненнями, не треба лізти в код
  • Заодно налаштовується XML-RPC

Мінуси:

  • Працює лише якщо вже користуєтеся Solid Security (ставити окремо заради цього, зайве)
  • Безплатна версія закриває REST API повністю для неавторизованих, без винятків для окремих ендпоїнтів

Завантажити: 🔗 Solid Security на WordPress.org

Спосіб 3: Код у functions.php, без плагінів

Якщо не хочете ставити плагін заради одного фільтра, ось сніпет, який робить те саме. Додайте його до functions.php дочірньої теми або через плагін Code Snippets.

Перед редагуванням зробіть бекап сайту. Помилка в functions.php викликає білий екран смерті, без доступу до адмінки виправляти доведеться через FTP.

1/**
2 * Закриваємо REST API для неавторизованих користувачів.
3 * Авторизовані працюють з API як зазвичай.
4 */
5add_filter('rest_authentication_errors', function($access) {
6 if (! is_user_logged_in()) {
7 return new WP_Error(
8 'rest_forbidden',
9 __('REST API restricted to authenticated users.', 'textdomain'),
10 array('status' => 403)
11 );
12 }
13 return $access;
14});

Що тут відбувається. Фільтр rest_authentication_errors спрацьовує під час кожного REST-запиту. is_user_logged_in() перевіряє, чи ввійшов відвідувач. Якщо ні, повертається WP_Error із кодом 403, і WordPress далі запит не пропускає. Якщо ввійшов, API працює без обмежень.

Після додавання коду перевірте результат: відкрийте /wp-json/ у режимі інкогніто. Має повернутися помилка 403.

Важливо. Старий фільтр rest_enabled видалено з ядра WordPress. Сніпети з add_filter('rest_enabled', '_return_false'), які трапляються в старих посібниках, не працюють починаючи з WordPress 5.0. Використовуйте лише rest_authentication_errors.

Спосіб 4: Блокування через.htaccess, на рівні сервера

Радикальний метод. Правило в .htaccess блокує запити до /wp-json/ ще до запуску WordPress. Сервер Apache повертає 403, не доходячи до PHP.

Підходить коли:

  • REST API точно не потрібен у жодному вигляді, ні вам, ні плагінам;
  • сервер працює на Apache (для Nginx правило пишеться через location-блок);
  • ви готові правити серверний конфіг.

Додайте в .htaccess у корені сайту:

1<IfModule mod_rewrite.c>
2RewriteEngine On
3RewriteCond %{REQUEST_URI} ^/wp-json/ [NC]
4RewriteRule .* - [F]
5</IfModule>

Правило спрацьовує на будь-який URL, що починається з /wp-json/. Прапор [F] означає 403 Forbidden, прапор [NC] робить порівняння регістронезалежним.

Обов’язково зробіть копію .htaccess перед правкою. Помилка в синтаксисі кладе весь сайт із помилкою 500.

Головний мінус підходу: блокуються всі REST-запити без винятків. Якщо після правки перестала працювати форма зворотного зв’язку (Contact Form 7 використовує REST API), повертайтеся до способу 1 або 3.

Подивіться 6-хвилинний огляд ризиків REST API від Девіда Макаллена: він показує реальні запити до /wp-json/ і демонструє обидва плагіни в дії.

⁉️🤔 Часті запитання

Чи потрібно вимикати REST API на кожному сайті?

Ні. Якщо ви використовуєте мобільний застосунок WordPress, редактор блоків (Gutenberg) або плагіни на кшталт Contact Form 7 і WooCommerce, REST API їм потрібен. У цьому разі краще не вимикати його повністю, а налаштувати обмеження за ролями.

Вимикати REST API варто на сайтах, де він не використовується свідомо: блоги на класичному редакторі, лендінги, сайти-візитівки. На таких проєктах відкритий /wp-json/ не дає нічого, крім ризиків. Дві хвилини на встановлення плагіна Disable WP REST API, і вектор атаки закрито.

Як перевірити, що REST API справді вимкнений?

Відкрийте в браузері https://вашсайт.ru/wp-json/ у режимі інкогніто (ви маєте бути розлогінені). Якщо бачите помилку 401 або 403, REST API закритий. Якщо відображається JSON із даними, захист не працює, перевірте налаштування.

Командний рядок теж підходить: curl -I https://вашсайт.ru/wp-json/wp/v2/users. Код відповіді 200 означає, що список користувачів віддається публічно, тривожний сигнал, захист треба доналаштувати.

Чи зламає вимкнення REST API редактор блоків?

Ні, якщо ви використовуєте способи 1-3. Плагін Disable WP REST API, Solid Security і сніпет на rest_authentication_errors пропускають авторизованих користувачів. Редактор блоків працює, ви ж увійшли до адмінки.

Спосіб 4 (.htaccess), виняток. Серверне блокування відсікає всіх без розбору, і редактор блоків перестане працювати. Якщо після правки .htaccess адмінка зламалася, повертайтеся до способу 1 або 3.

Що безпечніше: плагін чи код у functions.php?

З погляду захисту обидва варіанти рівноцінні, використовують один механізм WordPress. Різниця в зручності та супроводі.

Плагін Disable WP REST API оновлюється автоматично, не залежить від теми і не злітає під час зміни шаблону. Код у functions.php, для тих, хто принципово не ставить плагіни заради однієї функції. Обирайте за своїм підходом до адміністрування, на безпеку це не впливає.

Чи можна закрити лише ендпоїнт /users, а решту залишити?

Можна, але це вже тонке налаштування. Безплатні інструменти зі статті блокують REST API повністю для неавторизованих.

Якщо потрібно залишити одні ендпоїнти й закрити інші, використовуйте REST Pro Tools (Pro-версія плагіна Disable WP REST API) або фільтр rest_endpoints у functions.php. Доведеться явно перелічити дозволені маршрути, завдання на пів години, якщо знаєте структуру WordPress REST API.

Закрили REST API, що далі?

REST API, лише один вектор атаки. Закривши його, ви прибрали найпростішу точку входу для ботів, але це не заміна повноцінному захисту.

Якщо коротко: спосіб 1 (плагін Disable WP REST API) вирішує завдання за дві хвилини. Поставили, перевірили /wp-json/ в інкогніто, переконалися, що форма зворотного зв’язку працює, готово. Ризиків стало менше.

Наступний шар, файрвол і захист від брутфорсу. Почніть із безплатного Solid Security: він закриє і REST API, і XML-RPC, і підбір паролів в одному інтерфейсі. Який плагін безпеки стоїть у вас, напишіть у коментарях.