REST API — мощный инструмент WordPress, который позволяет внешним приложениям и сервисам взаимодействовать с вашим сайтом. Однако для некоторых проектов REST API может представлять угрозу безопасности, особенно если не используется должным образом. В этой статье мы подробно разберём, как отключить или ограничить доступ к REST API, чтобы защитить сайт от нежелательных запросов и атак.
Что такое REST API в WordPress и зачем его отключать
REST API позволяет получить доступ к содержимому сайта через стандартные HTTP-запросы в формате JSON. Это удобно для создания мобильных приложений, внешних сервисов, интеграций и даже для некоторых функций темы и плагинов.
Но если REST API не используется или доступ к нему открыт всем, злоумышленники могут получать информацию о структуре сайта, пользователях и даже выполнять определённые действия, если есть уязвимости.
Поэтому задача разработчика — либо полностью отключить REST API, если он не нужен, либо ограничить доступ к нему.
Отключение REST API через код: простой способ
Самый прямой метод — добавить фильтр, который будет блокировать все запросы к REST API для неавторизованных пользователей. Для этого в файл functions.php вашей темы или в плагин можно добавить следующий код:
add_filter('rest_authentication_errors', 'wpaction_disable_rest_api_for_guests');
function wpaction_disable_rest_api_for_guests($access) {
if (!is_user_logged_in()) {
return new WP_Error('rest_cannot_access', 'Доступ к REST API запрещён', array('status' => 401));
}
return $access;
}Этот код возвращает ошибку 401 Unauthorized для всех неавторизованных запросов к REST API. При этом REST API остаётся доступным для авторизованных пользователей (администраторов, редакторов и т.д.).
Данный способ прост и безопасен, он не ломает функциональность сайта, если вам нужно работать с REST API, например, в админке.
Полное отключение REST API
Если REST API на сайте не используется совсем, можно полностью отключить его регистрацию, чтобы снизить нагрузку и повысить безопасность. Для этого добавьте в functions.php следующий код:
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
remove_action('xmlrpc_rsd_apis', 'rest_output_rsd');
remove_action('wp_head', 'rest_output_link_wp_head');
remove_action('template_redirect', 'rest_output_link_header', 11);Этот код отключает саму возможность обработки REST API запросов и удаляет ссылки на API из HTML-заголовков и RSS.
Важно: полное отключение может привести к проблемам с некоторыми плагинами и темами, которые используют REST API. Поэтому перед применением тщательно протестируйте сайт.
Ограничение доступа к REST API с помощью плагинов
Если вы предпочитаете готовые решения, то на Clearfy Pro есть функционал для управления REST API. С его помощью можно быстро отключить API для гостей или частично ограничить доступ, не касаясь кода.
Другой популярный плагин — WPCommunity, который также позволяет управлять безопасностью и доступом к REST API.
Как проверить, что REST API действительно отключен
После внесения изменений важно проверить, что REST API заблокирован или ограничен. Для этого можно использовать curl или любой REST клиент:
curl -I https://example.com/wp-json/Если REST API отключен, вы получите ошибку 401 или 403, или просто пустой ответ.
Если же открывается JSON с описанием маршрутов — значит API доступен.
Дополнительные советы по безопасности REST API
Ограничение доступа по IP-адресам
Если REST API нужен только для определённых сервисов, можно ограничить доступ по IP через .htaccess или в коде:
add_filter('rest_authentication_errors', 'wpaction_restrict_rest_api_by_ip');
function wpaction_restrict_rest_api_by_ip($access) {
$allowed_ips = ['123.123.123.123', '111.111.111.111'];
if (!in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) {
return new WP_Error('rest_cannot_access', 'Доступ к REST API запрещён для вашего IP', array('status' => 403));
}
return $access;
}Отключение REST API для определённых типов пользователей
Можно сделать REST API доступным только администраторам, запретив для всех остальных:
add_filter('rest_authentication_errors', 'wpaction_rest_api_admins_only');
function wpaction_rest_api_admins_only($access) {
if (!current_user_can('administrator')) {
return new WP_Error('rest_cannot_access', 'Доступ разрешён только администраторам', array('status' => 403));
}
return $access;
}Итоги
Отключение или ограничение доступа к REST API — важный шаг для повышения безопасности WordPress-сайта. Если ваш проект не использует REST API, лучше отключить его полностью или хотя бы запретить доступ гостям. Для более гибких настроек подойдут готовые плагины, например Clearfy Pro.
Используйте приведённые примеры кода, адаптируйте их под свои задачи и всегда проверяйте работу сайта после изменений.