Сокрытие от пользователей сообщений об ошибках

Задача
Необходимо скрыть от пользователей сообщения PHP об ошибках.

Решение
Установите следующие значения в вашем файле php.ini или в конфигурационном файле веб-сервера:

display_errors =off
log_errors =on

Руководствуясь этими настройками, PHP не отображает ошибки в броузере в виде HTML, а сохраняет их в серверном журнале ошибок.

Обсуждение
Если параметр конфигурации log_errors установлен в on, то сообщения об ошибках записываются в серверный журнал ошибок. Для того что-бы PHP записывал ошибки в отдельный файл, присвойте параметру error_log имя этого файла:

error_log = /var/log/php.error.log

Если параметр error_log установлен в значение syslog, то сообщения PHP об ошибках посылаются системному регистратору ошибок с помощью syslog(3) в UNIX и Event Log в Windows NT.

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


Во-первых, эти ошибки показывают ваш непрофессионализм (опытным пользователям) и, во-вторых, вносят путаницу (для новичков). Если что-то идет не так во время записи входной информации формы в базу данных, то надо проверить код возврата в ответ на запрос в базу данных и послать сообщение пользователю с извинениями и просьбой зайти попозже. Показ пользователям малопонятных сообщений непосредственно от PHP не способствует повышению доверия к вашему сайту.

Во-вторых, показ пользователю сообщений об ошибках представляет риск для безопасности. В зависимости от базы данных и типа ошибок, сообщения об ошибках могут содержать информацию о способе регистрации в базе данных и о ее структуре. Злоумышленник, воспользовавшись этой информацией, может предпринять атаку на ваш сайт.

Например, если сервер базы данных «упал», а вы пытаетесь соединиться с ним с помощью функции mysql_connect(), то PHP выдаст следующее предупреждение:



Warning: Can't connect to MySQL server on 'db.example.com' (111) in
/www/docroot/example.php on line 3


Пользователь, броузеру которого будет послано это предупреждающее сообщение, узнает, что ваш сервер базы данных называется db.example.com, и сможет организовать на него атаку.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Аутентификация, основанная на cookies
Буферизация вывода в броузер
Взаимодействие в рамках Apache
Идентификация различных броузеров
Настройка обработки ошибок

Вернуться в раздел: PHP / 8. Основы Web