REST API безопасность WordPress: лучшие практики защиты

Введение в REST API WordPress

REST API WordPress предоставляет разработчикам мощный инструмент для взаимодействия с сайтом программно. Однако, это также открывает дополнительные векторы атак для злоумышленников.

1. Ограничение доступа к REST API

По умолчанию, REST API WordPress доступен всем. Ограничьте доступ, разрешив запросы только с определенных доменов или IP-адресов.

function restrict_rest_api_access() {
    $allowed_ips = array('192.168.1.1', '127.0.0.1');
    if (!in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) {
        wp_die('Доступ запрещен', 'rest_api_access_denied', array('status' => 403));
    }
}
add_action('rest_api_init', 'restrict_rest_api_access');

2. Nonce проверка для безопасности запросов

Используйте nonce (number used once) для проверки легитимности запросов к REST API.

function verify_nonce($request) {
    $nonce = $request->get_header('X-WP-Nonce');
    if (!wp_verify_nonce($nonce, 'wp_rest')) {
        return new WP_Error('rest_api_nonce_error', 'Nonce недействителен', array('status' => 403));
    }
    return true;
}
add_filter('rest_pre_dispatch', 'verify_nonce', 10, 3);

Реализация rate limiting

Ограничьте количество запросов к REST API в единицу времени, чтобы предотвратить брутфорс-атаки.

function rate_limit_rest_api($request) {
    $ip = $_SERVER['REMOTE_ADDR'];
    $limit = 100; // лимит запросов
    $period = 60; // период в секундах
    // реализация логики rate limiting
}
add_filter('rest_pre_dispatch', 'rate_limit_rest_api', 10, 3);

3. Отключение ненужных эндпоинтов REST API

Отключите эндпоинты, которые не используются на вашем сайте, чтобы уменьшить поверхность атаки.

function disable_unnecessary_endpoints() {
    // например, отключение эндпоинта posts
    unregister_rest_route('wp/v2', '/posts');
}
add_action('rest_api_init', 'disable_unnecessary_endpoints', 999);

4. JWT аутентификация для REST API

Используйте JSON Web Tokens (JWT) для аутентификации запросов к REST API.

Для более детальной информации о повышении безопасности WordPress, читайте в нашей статье о безопасности WP.

5. Дополнительные меры безопасности

Используйте плагины безопасности и регулярно обновляйте WordPress и его компоненты.

Более подробно о статической анализе кода WordPress плагинов и тем читайте в статье о PHPStan + WordPress.

Также рекомендуем ознакомиться с руководством по оптимизации WordPress с помощью NGINX FastCGI Cache.

Для новичков WordPress предлагаем ознакомиться с нашим полным руководством по освоению WordPress.

❓ Часто задаваемые вопросы

Что такое REST API в WordPress?

REST API в WordPress представляет собой программный интерфейс, позволяющий взаимодействовать с сайтом посредством HTTP-запросов.

Зачем нужна nonce проверка в REST API?

Nonce проверка используется для подтверждения легитимности запросов к REST API, предотвращая CSRF-атаки.

Как реализовать rate limiting для REST API?

Rate limiting реализуется путем отслеживания количества запросов с одного IP-адреса в единицу времени и ограничения доступа при превышении лимита.

Что такое JWT аутентификация?

JWT (JSON Web Tokens) аутентификация — это метод проверки подлинности пользователей посредством передачи токена, содержащего информацию о пользователе.