WordPress предоставляет мощный REST API, который позволяет взаимодействовать с сайтом извне — создавать, читать, обновлять и удалять контент. Но по умолчанию доступ к API открыт, и для многих проектов требуется ограничить доступ, чтобы данные оставались приватными и защищёнными. В этой статье подробно разберём, как реализовать приватный REST API в WordPress с помощью аутентификации и ограничения доступа.
Почему нужен приватный REST API в WordPress
REST API в WordPress удобен, но без защиты он уязвим к нежелательному доступу. Например, если вы создаёте мобильное приложение, внутренний сервис или интеграцию с CRM, важно, чтобы только авторизованные пользователи или сервисы могли обращаться к API.
Без приватности API рискует получить данные постов, пользователей, или даже возможность изменить содержимое сайта посторонний человек.
Поэтому простой способ — это добавление аутентификации и проверка прав пользователя на каждом запросе.
Способы защиты REST API: аутентификация и авторизация
1. Использование cookie аутентификации WordPress
Если запросы идут с того же домена, что и сайт, можно использовать встроенную cookie аутентификацию. Это удобно для AJAX-запросов с фронтенда сайта. Однако для внешних приложений этот способ не подходит.
2. Basic Auth (базовая HTTP-аутентификация)
Подходит для простых сценариев, хоть и не самый безопасный, если не использовать HTTPS. Можно подключить плагин WP Basic Auth для быстрого старта.
3. JWT аутентификация (JSON Web Tokens)
Современный и безопасный способ — используем JWT. Для WordPress есть плагин WP JWT Auth. Он позволяет выдавать токены и проверять их при каждом запросе.
Пример реализации приватного REST API с JWT
Рассмотрим, как добавить защиту на примере кастомного REST эндпойнта.
Шаг 1. Установка и настройка плагина WP JWT Auth
Установите и активируйте плагин. В файле wp-config.php добавьте секретный ключ:
define('JWT_AUTH_SECRET_KEY', 'ваш_уникальный_секретный_ключ_длинной_не_менее_32_символов');Это обеспечит подпись токенов.
Шаг 2. Создание кастомного REST API маршрута с проверкой токена
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
add_action('rest_api_init', function() {
register_rest_route('wplearn/v1', '/secret-data', array(
'methods' => 'GET',
'callback' => 'wplearn_get_secret_data',
'permission_callback' => 'wplearn_check_jwt_auth',
));
});
function wplearn_check_jwt_auth() {
// Проверяем, авторизован ли пользователь через JWT
if (!is_user_logged_in()) {
return new WP_Error('rest_forbidden', 'Доступ запрещён', array('status' => 403));
}
return true;
}
function wplearn_get_secret_data() {
return array('secret' => 'Это приватные данные, доступные только авторизованным пользователям');
}Этот маршрут /wp-json/wplearn/v1/secret-data вернёт данные только тем, кто аутентифицирован.
Шаг 3. Получение JWT токена
Для начала работы запросите токен с помощью POST-запроса:
POST /wp-json/jwt-auth/v1/token
Content-Type: application/json
{
"username": "ваш_логин",
"password": "ваш_пароль"
}В ответ получите JSON с токеном:
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"user_email": "user@example.com",
"user_nicename": "user",
"user_display_name": "User"
}Шаг 4. Использование токена для доступа к приватному API
Отправляйте запросы на приватный маршрут с заголовком авторизации:
GET /wp-json/wplearn/v1/secret-data
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...Если токен валиден, получите ответ с данными.
Дополнительные советы по безопасности REST API в WordPress
Ограничение доступа по IP
Если API доступен только для определённых серверов, можно фильтровать IP в функции permission_callback. Например:
function wplearn_check_ip() {
$allowed_ips = array('123.45.67.89', '98.76.54.32');
if (!in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) {
return new WP_Error('rest_forbidden', 'Доступ запрещён', array('status' => 403));
}
return true;
}Минимизация доступных маршрутов
Если не используете стандартные REST маршруты, можно полностью отключить их или ограничить через фильтры, чтобы минимизировать вектор атак.
Использование плагина Clearfy Pro для комплексной защиты
Плагин Clearfy Pro содержит множество настроек для защиты REST API и отключения неиспользуемых функций, что дополнительно повысит безопасность вашего сайта.
Примеры плагинов для расширения и защиты REST API
- WP JWT Auth — добавляет поддержку JWT аутентификации;
- WP Basic Auth — простая базовая аутентификация для REST API;
- Clearfy Pro — комплексная оптимизация и безопасность, включая REST API;
- WP REST Filter — позволяет фильтровать и модифицировать ответы REST API;
- Expert Review — если вы делаете закрытый API для отзывов, можно интегрировать с этим плагином.
Заключение по теме приватного REST API в WordPress
Реализация приватного REST API — важный шаг для защиты данных и интеграций. Используя JWT аутентификацию и продуманные проверки прав, вы сможете безопасно расширять возможности сайта и создавать надёжные внешние сервисы.
Подключайте современные плагины, следите за обновлениями безопасности и минимизируйте открытые маршруты — и ваш WordPress REST API будет работать быстро и надёжно.