
🔒 Как отключить 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 */ 5 add_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> 2 RewriteEngine On 3 RewriteCond %{REQUEST_URI} ^/wp-json/ [NC] 4 RewriteRule .* - [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, и подбор паролей в одном интерфейсе. Какой плагин безопасности стоит у вас, напишите в комментариях.


