Вопрос или проблема
🔖 Фон и окружение
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
могут быть полезны.
- Добавление кода в файл 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;
});
-
Объяснение кода:
- Первый фильтр
jwt_auth_cannot_instantiate
изменяет сообщение при ошибках аутентификации, чтобы замаскировать реальную причину сбоя и вернуть общее сообщение о недопустимых учетных данных. - Второй фильтр
rest_authentication_errors
проверяет ошибки аутентификации и переопределяет их коды и сообщения.
- Первый фильтр
-
Перевод сообщений:
Для работы с многоязычными сайтами важно использовать функции перевода WordPress, такие как __()
. Вставьте нужный текст на вашем языке в качестве аргумента, как показано выше.
Заключение
Безопасность ваших пользователей должна быть приоритетом при использовании любых механизмов аутентификации. Настройка и замена стандартных сообщений об ошибках с помощью приведённых выше фильтров поможет предотвратить возможные атаки на ваш сайт, делая его более защищённым. Также не забывайте всегда проверять совместимость плагинов и обновления, чтобы обеспечить максимальную безопасность и функциональность.
Рекомендации по SEO
При публикации этой информации убедитесь, что вы используете ключевые слова, такие как "плагин JWT для WordPress", "настройка WP_Error", "безопасность WordPress", чтобы ваш контент был высоко оценён в поисковых системах и помог другим разработчикам в решении похожих проблем.
С помощью этих шагов вы не только улучшите безопасность своего сайта, но и создадите более безопасный опыт для своих пользователей.