REST API в WordPress — мощный инструмент для взаимодействия с сайтом извне. Однако открытость API может стать уязвимостью, если злоумышленники начнут посылать слишком много запросов, создавая нагрузку или пытаясь получить несанкционированный доступ. В этой статье подробно рассмотрим, как ограничить количество запросов к REST API, чтобы повысить безопасность и защитить сервер от перегрузок.
Почему важно ограничивать запросы к REST API WordPress
REST API предоставляет множество возможностей, но без контроля его использование может привести к проблемам:
- Перегрузка сервера. Если кто-то начнёт массово посылать запросы, сервер может замедлиться или даже упасть.
- Атаки типа brute force. Через API можно пытаться перебрать пароли или искать уязвимости.
- Расход ресурсов. Даже легитимные, но частые запросы могут сильно нагружать хостинг, увеличивая расходы.
Поэтому ограничение запросов — важный элемент защиты.
Как ограничить количество запросов к REST API: 3 способа
1. Использование плагина WPScan Limit REST API Requests
Для сайта на wpscan.ru актуален плагин WPScan Limit REST API Requests, который позволяет быстро настроить лимиты запросов на уровне REST API.
Основные возможности:
- Задание лимита запросов в минуту для каждого IP.
- Черный список IP при превышении лимита.
- Легкая настройка через админку.
Это простой и эффективный способ без программирования.
2. Ограничение запросов через код в functions.php
Если вы хотите гибко контролировать REST API без плагинов, можно добавить код в файл functions.php вашей темы или создать небольшой плагин. Ниже пример функции, которая ограничивает количество запросов к REST API с одного IP до 60 в минуту.
function wpscan_limit_rest_api_requests() {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_key = 'wpscan_rest_api_count_' . md5($ip);
$count = (int) get_transient($transient_key);
if ($count >= 60) {
wp_die('Превышен лимит запросов к REST API. Попробуйте позже.', '', ['response' => 429]);
}
set_transient($transient_key, $count + 1, MINUTE_IN_SECONDS);
}
add_action('rest_api_init', 'wpscan_limit_rest_api_requests', 0);Объяснение:
get_transientхранит количество запросов с конкретного IP.- Если больше 60, выдаём ошибку 429 Too Many Requests.
- Таймер на 1 минуту для сброса счётчика.
Этот метод подходит для небольших сайтов и не требует сторонних плагинов.
3. Использование плагина для управления лимитами запросов (Rate Limiting)
Для более продвинутого контроля можно использовать плагины, которые реализуют rate limiting для всего сайта, включая REST API. Например:
- Clearfy Pro — содержит функции оптимизации и защиты, включая ограничение запросов.
- Limit Login Attempts Reloaded — хотя и для логина, помогает снизить нагрузку.
Эти решения хорошо интегрируются с WordPress и дают комплексный подход к безопасности.
Как тестировать и мониторить лимиты REST API
После настройки лимитов важно проверить их работу и отследить, не мешают ли они легитимным пользователям.
- Используйте инструменты типа
curlили Postman для массовой отправки запросов и проверки, что после заданного количества приходит ошибка 429. - Ведите логи срабатываний ограничения — это поможет выявить злоумышленников и понять нагрузку.
- Следите за производительностью сайта, чтобы убедиться, что лимиты снижают нагрузку.
Дополнительные рекомендации по безопасности REST API
Отключение ненужных эндпоинтов
Если вашему сайту не нужны все возможности REST API, отключите лишние эндпоинты. Например, закрыть публичный доступ к пользовательским данным.
function wpscan_disable_rest_endpoints( $endpoints ) {
if ( isset( $endpoints['/wp/v2/users'] ) ) {
unset( $endpoints['/wp/v2/users'] );
}
return $endpoints;
}
add_filter( 'rest_endpoints', 'wpscan_disable_rest_endpoints' );Аутентификация запросов
Для приватных операций REST API всегда используйте проверенную аутентификацию, например JWT или OAuth. Это защитит от несанкционированного доступа.
Использование WAF и сетевых фильтров
Настройте Web Application Firewall (WAF), например, с помощью плагина Clearfy Pro, который поможет блокировать подозрительный трафик до попадания на сайт.
Итоги по ограничению запросов к REST API WordPress
Ограничение количества запросов к REST API — важный шаг для защиты сайта, снижения нагрузки и предотвращения атак. Для этого можно использовать как готовые плагины, так и собственный код. Комбинируйте методы, чтобы добиться максимальной безопасности без потери функционала.
Если хотите быстро и эффективно настроить лимиты, советуем начать с плагина WPScan Limit REST API Requests. Для более сложных сценариев подойдет код и комплексные решения на базе Clearfy Pro.