REST API в WordPress — мощный инструмент, который позволяет взаимодействовать с сайтом через внешние приложения и скрипты. Однако бывают ситуации, когда необходимо ограничить или полностью отключить доступ к REST API, например, для повышения безопасности или снижения нагрузки на сервер. В этой статье мы подробно рассмотрим, как отключить REST API в WordPress без использования плагинов, а также варианты частичного ограничения доступа.
Что такое REST API и зачем его отключать
WordPress REST API предоставляет стандартный интерфейс для получения, создания, обновления и удаления данных на сайте через HTTP-запросы. Включение REST API открывает возможности для разработчиков, мобильных приложений, внешних сервисов и новых функций в админке.
Однако, если вы не используете REST API или хотите ограничить доступ к нему, его можно отключить для повышения безопасности. Некоторые боты и злоумышленники могут использовать его для сбора информации о сайте или попыток взлома.
Также отключение REST API может помочь снизить нагрузку на сервер, если сайт получает много нежелательных запросов.
Полное отключение REST API с помощью функций темы
Для полного отключения REST API достаточно добавить в файл functions.php вашей темы код, который будет блокировать все входящие запросы к API:
<?php
function wptalk_disable_rest_api() {
if (!is_user_logged_in()) {
wp_die('REST API отключен.', '', array('response' => 403));
}
}
add_action('rest_api_init', 'wptalk_disable_rest_api', 1);
Этот код проверяет, залогинен ли пользователь. Если нет — возвращает ошибку 403 Forbidden для всех REST API запросов. Таким образом, REST API будет доступен только администраторам и другим залогиненным пользователям.
Если хочется полностью отключить REST API для всех пользователей, включая авторизованных, замените проверку на просто вызов wp_die() без условий:
<?php
function wptalk_disable_rest_api_everyone() {
wp_die('REST API отключен.', '', array('response' => 403));
}
add_action('rest_api_init', 'wptalk_disable_rest_api_everyone', 1);
Отключение REST API для гостей, оставляя доступ для админов
Часто нужно ограничить REST API только для незарегистрированных пользователей, но сохранить работу для администраторов и редакторов. Для этого подойдет такой вариант:
<?php
function wptalk_restrict_rest_api_access() {
if (!is_user_logged_in() || !current_user_can('edit_posts')) {
wp_die('Доступ к REST API запрещён.', '', array('response' => 403));
}
}
add_action('rest_api_init', 'wptalk_restrict_rest_api_access', 1);
Здесь проверяется, что пользователь не авторизован или не имеет прав редактирования постов — в этом случае доступ закрывается. Это удобно, если нужно оставить API для редакторов и выше.
Отключение REST API только для определённых маршрутов
Иногда нужно не отключать REST API полностью, а заблокировать только некоторые маршруты, например, доступ к информации о пользователях или комментариях. Это можно сделать так:
<?php
function wptalk_disable_rest_api_routes($access) {
$route = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
// Блокируем доступ к маршрутам пользователей
if (strpos($route, '/wp/v2/users') !== false) {
return new WP_Error('rest_forbidden', 'Доступ к пользователям запрещён', array('status' => 403));
}
// Можно добавить другие маршруты по аналогии
return $access;
}
add_filter('rest_authentication_errors', 'wptalk_disable_rest_api_routes');
Этот код проверяет URI запроса и блокирует доступ к REST API маршрутам пользователей. Аналогично можно блокировать комментарии, таксономии и другие маршруты.
Плагины для управления REST API — когда использовать
Если вы хотите более гибко управлять REST API без кода, обратите внимание на плагины. Например:
- Clearfy Pro — позволяет отключать REST API и настраивать доступ по ролям.
- WPRemark — с дополнительным функционалом безопасности и оптимизации.
Но если нужна простая и быстрая блокировка, кодовые решения выше лучше и не нагружают сайт лишними плагинами.
Проверка работы и отладка отключения REST API
После внесения изменений важно проверить, что REST API действительно отключен или ограничен. Самый простой способ — открыть в браузере URL https://ваш-сайт.ru/wp-json/. Если вы видите ошибку 403 или сообщение, значит ограничение работает.
Для тестирования запросов можно использовать Postman или curl:
curl -i https://ваш-сайт.ru/wp-json/wp/v2/posts
Если REST API отключен, сервер вернёт ошибку доступа. Если нет — будет список постов.
Выводы и рекомендации
Отключение REST API в WordPress без плагинов — простая и эффективная мера безопасности. Выбирайте подходящий способ в зависимости от задач: полное отключение, ограничение для гостей или блокировка отдельных маршрутов. Использование собственного кода в functions.php минимизирует нагрузку и позволяет гибко настраивать доступ.
Если хотите расширенные возможности и удобный интерфейс — рассмотрите плагины из каталога WPShop.