REST API в WordPress — мощный и удобный инструмент для взаимодействия с сайтом через внешние приложения и плагины. Однако в некоторых случаях может возникнуть необходимость ограничить или полностью отключить REST API, например, по соображениям безопасности или для оптимизации производительности. В этой статье разберём, как грамотно отключить REST API, не нарушая работу ключевых функций сайта.
Что такое REST API в WordPress и зачем его отключать?
REST API предоставляет стандартный интерфейс для получения и изменения данных сайта через HTTP-запросы в формате JSON. Многие современные темы и плагины используют REST API для динамической загрузки контента, интеграций и других задач.
Тем не менее, открытый REST API может стать точкой уязвимости, особенно если на сайте используются устаревшие плагины или темы. Из-за этого владельцы сайтов хотят ограничить доступ к API для неавторизованных пользователей или полностью его отключить.
Однако простое отключение REST API может привести к сбоям в работе некоторых плагинов или функций WordPress, которые его используют. Поэтому важно правильно ограничить доступ, сохранив критически важный функционал.
Ограничение доступа к REST API: подходы и примеры
1. Отключение REST API для гостей и неавторизованных пользователей
Самый распространённый сценарий — запретить REST API для пользователей без авторизации, позволяя работать с ним администраторам и другим авторизованным ролям.
Для этого можно добавить следующий код в файл functions.php вашей темы или в файл основного плагина:
function wplite_restrict_rest_api( $access ) {
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_forbidden', 'REST API доступ запрещён.', array( 'status' => 401 ) );
}
return $access;
}
add_filter( 'rest_authentication_errors', 'wplite_restrict_rest_api' );Этот фильтр проверяет, авторизован ли пользователь, и если нет — блокирует доступ к REST API с ошибкой 401. Такой способ сохраняет работу REST API для администраторов и авторизованных пользователей.
2. Отключение REST API только для определённых эндпоинтов
Иногда нужно ограничить API не полностью, а лишь некоторые его части. Например, блокировать доступ к пользовательским данным, но разрешить работу с записями.
Пример кода для ограничения доступа к эндпоинтам пользователей:
function wplite_block_user_rest_endpoints( $access ) {
$request = rest_get_server()->get_current_request();
$route = $request->get_route();
if ( strpos( $route, '/wp/v2/users' ) === 0 ) {
if ( ! current_user_can( 'manage_options' ) ) {
return new WP_Error( 'rest_forbidden', 'Доступ к пользователям REST API запрещён.', array( 'status' => 403 ) );
}
}
return $access;
}
add_filter( 'rest_authentication_errors', 'wplite_block_user_rest_endpoints' );В этом коде проверяется текущий запрос API, и если он касается пользователей, доступ разрешается только администраторам. Остальные эндпоинты работают как обычно.
Плагины для управления REST API и их возможности
Если вы хотите не писать код самостоятельно, можно использовать готовые плагины с расширенными настройками безопасности REST API.
- Clearfy Pro — мощный плагин для оптимизации и безопасности WordPress, в том числе умеет гибко отключать REST API для гостей и отдельных ролей. Подробнее: https://wpshop.ru/plugins/clearfy-pro/
- Disable REST API — простой и бесплатный плагин, который отключает REST API для неавторизованных пользователей без кода.
- WPRemark — плагин для управления комментариями и безопасностью, включает опции ограничения REST API.
Как проверить, что REST API отключён правильно?
После внесения изменений важно убедиться, что REST API работает согласно вашим настройкам и не ломает функциональность сайта.
Для проверки откройте в браузере URL https://ваш-сайт.ru/wp-json/. Если REST API отключён для гостей, вы должны увидеть сообщение об ошибке или отказе в доступе.
Для проверки доступа авторизуйтесь на сайте и повторите запрос — API должен работать без ошибок.
Кроме того, рекомендуется проверить работу ключевых функций сайта — например, редактора Gutenberg, плагинов, использующих REST API. Если что-то перестало работать, возможно, стоит скорректировать ограничения.
Расширенные методы: частичное отключение и фильтрация запросов
Для опытных разработчиков есть возможность фильтровать REST API запросы более тонко, например, отключать только определённые методы (POST, PUT), или разрешать доступ с определённых IP.
Пример фильтрации по методу запроса:
function wplite_filter_rest_methods( $access ) {
$request = rest_get_server()->get_current_request();
$method = $request->get_method();
if ( in_array( $method, array( 'POST', 'PUT', 'DELETE' ) ) && ! current_user_can( 'edit_posts' ) ) {
return new WP_Error( 'rest_forbidden', 'Запросы на изменение данных запрещены.', array( 'status' => 403 ) );
}
return $access;
}
add_filter( 'rest_authentication_errors', 'wplite_filter_rest_methods' );Этот код блокирует любые запросы на изменение данных для пользователей без права редактировать записи, сохраняя при этом возможность чтения данных через GET-запросы.
Итоги и рекомендации
Отключение REST API в WordPress — задача, требующая аккуратного подхода. Простое блокирование всего API может привести к проблемам в работе сайта и плагинов.
Рекомендуется ограничивать доступ только для неавторизованных пользователей или блокировать отдельные чувствительные эндпоинты. Используйте фильтр rest_authentication_errors для гибкой настройки, а при необходимости — проверяйте работу сайта после изменений.
Если хотите сэкономить время и получить расширенные возможности, обратите внимание на плагин Clearfy Pro — он позволяет управлять REST API без кода и дополнительно улучшает безопасность сайта. Подробнее: https://wpshop.ru/plugins/clearfy-pro/