Сообщения об ошибках — важный инструмент для разработчиков и администраторов сайтов на WordPress. Однако стандартный вывод ошибок часто недостаточно информативен или, наоборот, раскрывает слишком много информации, что может представлять угрозу безопасности. В этой статье подробно разберем, как изменить вывод сообщений об ошибках в WordPress, чтобы сделать их более полезными и безопасными.
Почему нужно кастомизировать сообщения об ошибках в WordPress
По умолчанию WordPress выводит ошибки PHP и сообщения об ошибках базы данных в стандартном формате. Это удобно для разработки, но на боевом сайте такие сообщения могут:
- Раскрывать информацию о структуре базы данных и сервере, что облегчает работу злоумышленникам;
- Быть слишком техническими и непонятными для конечных пользователей;
- Использовать дефолтный стиль, который не вписывается в дизайн сайта.
Изменение вывода ошибок помогает сделать сайт более профессиональным и безопасным.
Настройка уровня ошибок и отключение вывода в WordPress
Первое, что нужно сделать — контролировать уровень вывода ошибок. В файле wp-config.php есть несколько констант:
WP_DEBUG— включает режим отладки;WP_DEBUG_LOG— логирует ошибки в файл;WP_DEBUG_DISPLAY— отвечает за показ ошибок на экране;SCRIPT_DEBUG— включает использование не сжатых версий скриптов и стилей.
Для боевого сайта рекомендуется отключить показ ошибок на экране, но оставить запись в лог:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);
Это позволит сохранять все ошибки в файле wp-content/debug.log и не показывать их посетителям.
Создание собственного обработчика вывода ошибок PHP
Для более гибкого контроля можно создать свой обработчик ошибок, который будет логировать ошибки и выводить кастомные сообщения. Ниже пример функции и подключения её в WordPress, с префиксом wplab_ для избежания конфликтов:
function wplab_error_handler($errno, $errstr, $errfile, $errline) {
$log_message = "Error [$errno]: $errstr in $errfile on line $errline";
error_log($log_message);
if (!(error_reporting() & $errno)) {
// Этот тип ошибки не включен в error_reporting
return false;
}
// Кастомное сообщение для пользователя
if (ini_get('display_errors')) {
echo "<div style='background:#f8d7da;color:#721c24;padding:10px;margin:10px 0;border:1px solid #f5c6cb;'>Произошла ошибка, подробности сохранены в логах.</div>";
}
/* Не запускаем внутренний обработчик PHP */
return true;
}
set_error_handler('wplab_error_handler');
Добавьте этот код в файл functions.php вашей активной темы или создайте небольшой плагин для удобства.
Кастомизация сообщений об ошибках авторизации и входа
Одной из часто встречающихся задач является изменение сообщений об ошибках при попытке входа в админ-панель. Стандартно WordPress показывает довольно общие ошибки, например "Неверное имя пользователя или пароль". Чтобы повысить безопасность, имеет смысл сделать сообщение более нейтральным.
Вот пример изменения сообщения об ошибке авторизации через фильтр login_errors:
add_filter('login_errors', 'wplab_custom_login_error_message');
function wplab_custom_login_error_message() {
// Возвращаем нейтральное сообщение
return 'Ошибка входа. Проверьте данные и попробуйте снова.';
}
Так вы не будете раскрывать, какая именно часть данных неверна — имя пользователя или пароль.
Использование плагинов для управления ошибками в WordPress
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- Clearfy Pro — имеет функции по оптимизации и безопасности, включая управление ошибками и скрытие версий WordPress. Подробнее: https://wpshop.ru/plugins/clearfy-pro/
- Expert Review — позволяет создавать структурированные отзывы и сообщения, можно адаптировать под вывод ошибок и уведомлений. Подробнее: https://wpshop.ru/plugins/expert-review/
Эти плагины помогут не только изменить стиль и содержание ошибок, но и улучшить общую безопасность сайта.
Вывод ошибок REST API в формате JSON с кастомным сообщением
Если вы создаете собственные REST API эндпоинты, полезно контролировать вывод ошибок в формате JSON. Вот пример функции для обработки ошибок в REST API с префиксом wplab_:
add_filter('rest_post_dispatch', 'wplab_rest_api_error_response', 10, 3);
function wplab_rest_api_error_response($response, $server, $request) {
if (is_wp_error($response)) {
$error_data = $response->get_error_data();
$custom_response = [
'success' => false,
'message' => 'Произошла ошибка при обработке запроса.',
'code' => $response->get_error_code()
];
return new WP_REST_Response($custom_response, isset($error_data['status']) ? $error_data['status'] : 500);
}
return $response;
}
Это позволит клиенту получить понятный и структурированный ответ.
Итоговые рекомендации по безопасности и удобству
Изменение и кастомизация вывода сообщений об ошибках — важный этап настройки WordPress-сайта. Рекомендуется:
- Отключать вывод ошибок на боевом сайте, но включать логирование;
- Создавать кастомные обработчики ошибок с понятным для пользователя и безопасным выводом;
- Использовать фильтры WordPress для изменения стандартных сообщений, например, при авторизации;
- При работе с REST API контролировать формат вывода ошибок;
- Для удобства и безопасности рассмотреть использование специализированных плагинов, таких как Clearfy Pro.
Следуя этим рекомендациям, вы сможете сделать ваш WordPress-сайт более профессиональным и безопасным.