Как настроить WP_Error (плагин аутентификации REST JWT)

Вопрос или проблема

🔖 Фон и окружение

WordPress 6.6.2
Плагин аутентификации JWT 1.3.4
Php 8.3

Я использую рекомендуемый плагин JWT аутентификация для WP REST API, чтобы аутентифицировать своих пользователей.

Запрашивая /wp-json/jwt-auth/v1/token для генерации нового токена, я вижу эти 2 сообщения об ошибках:

{
  “code": ‘[jwt_auth] incorrect_password’,
  “message“:”<strong>Ошибка:</strong> Неправильный пароль для имени пользователя <strong>root</strong>. <a href=” http:\N/\N/localhost:8096\N/wp-login.php?action=lostpassword\N ‘>Забыли пароль?<a>’,
  “data": {
    “status” : 403
  }
}
{
  “code": ‘[jwt_auth] invalid_username’,
  “message” : ”<strong>Ошибка:<\/strong> Имя пользователя <strong>rot<\/strong> не зарегистрировано на этом сайте. Если вы не уверены в своем имени пользователя, попробуйте использовать свой адрес электронной почты вместо этого”,
  “data": {
    “status": 403
  }
}

⛔ Моя проблема

Я хочу повысить безопасность против подбора паролей, поэтому: как предотвратить и настроить code и message, чтобы не отображать текущие сообщения об ошибках (invalid_username, incorrect_password).

Какой фильтр или действие я должен использовать?

🙆‍♂️ Ожидаемое

Я хочу объект, подобный тому, что в документации (и также перевести сообщение об ошибке на мой язык 🇫🇷):

{
    "code": "jwt_auth_failed",
    "data": {
        "status": 403
    },
    "message": "Недействительные учетные данные."
}

Заранее благодарю за ваше время и предложения ❤️

Ответ или решение

Как настроить WP_Error в плагине JWT Authentication для WordPress

Введение

Плагин JWT Authentication для WordPress — это мощный инструмент для аутентификации пользователей через REST API. Но, как и любое другое решение, он имеет свои нюансы, особенно в отношении безопасности. Мы рассмотрим, как изменить стандартные сообщения об ошибках, чтобы избежать раскрытия информации, касающейся неверных учетных данных, таких как имена пользователей и пароли.

Понимание текущих ошибок

При использовании плагина JWT Authentication вы можете получить следующие коды ошибок:

  • [jwt_auth] incorrect_password
  • [jwt_auth] invalid_username

Эти ошибки могут представлять угрозу безопасности, так как злоумышленник может определить, какое имя пользователя существует в системе, и корректен ли введённый пароль.

Решение проблемы

Для настройки и изменения стандартных сообщений об ошибках в плагине вам потребуется воспользоваться хуками WordPress. В частности, фильтры rest_authentication_errors и wp_login_failed могут быть полезны.

  1. Добавление кода в файл functions.php:

Откройте файл functions.php вашей темы и добавьте следующий код:

// Настройка сообщения об ошибках для аутентификации JWT
add_filter('jwt_auth_cannot_instantiate', function($message) {
    return [
        'code'    => 'jwt_auth_failed',
        'message' => __('Недопустимые учетные данные.', 'ваш_текстовый_домен'), // переведите по необходимости
        'data'    => [
            'status' => 403,
        ],
    ];
});

// Переопределение стандартных ошибок для неверного пароля
add_filter('rest_authentication_errors', function($result) {
    if ($result instanceof WP_Error) {
        if ($result->get_error_code() === 'jwt_auth_invalid_username') {
            return new WP_Error('jwt_auth_failed', __('Недопустимые учетные данные.', 'ваш_текстовый_домен'), array('status' => 403));
        } elseif ($result->get_error_code() === 'jwt_auth_invalid_password') {
            return new WP_Error('jwt_auth_failed', __('Недопустимые учетные данные.', 'ваш_текстовый_домен'), array('status' => 403));
        }
    }
    return $result;
});
  1. Объяснение кода:

    • Первый фильтр jwt_auth_cannot_instantiate изменяет сообщение при ошибках аутентификации, чтобы замаскировать реальную причину сбоя и вернуть общее сообщение о недопустимых учетных данных.
    • Второй фильтр rest_authentication_errors проверяет ошибки аутентификации и переопределяет их коды и сообщения.
  2. Перевод сообщений:

Для работы с многоязычными сайтами важно использовать функции перевода WordPress, такие как __(). Вставьте нужный текст на вашем языке в качестве аргумента, как показано выше.

Заключение

Безопасность ваших пользователей должна быть приоритетом при использовании любых механизмов аутентификации. Настройка и замена стандартных сообщений об ошибках с помощью приведённых выше фильтров поможет предотвратить возможные атаки на ваш сайт, делая его более защищённым. Также не забывайте всегда проверять совместимость плагинов и обновления, чтобы обеспечить максимальную безопасность и функциональность.

Рекомендации по SEO

При публикации этой информации убедитесь, что вы используете ключевые слова, такие как "плагин JWT для WordPress", "настройка WP_Error", "безопасность WordPress", чтобы ваш контент был высоко оценён в поисковых системах и помог другим разработчикам в решении похожих проблем.

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

Оцените материал
Добавить комментарий

Капча загружается...