Обычно различного рода экзепшенами стараются закрыть внутренние ошибки. Приведу примитивный пример, чтобы понятнее была суть вопроса.
$rand = rand(0, 1);
if ($rand == 1) $arr = ['a', 'b', 'c'];
printElements($arr);
function printElements(array $array) {
foreach ($array as $value) echo "$value<br/>";
}
В таком случае, если в $rand
окажется 1
, скрипт выполнится без ошибок. Если же 0
, пользователь в браузере увидит что-то в духе
Fatal error: Uncaught TypeError: Argument 1 passed to printElements() must be of the type array, null given, called in /path/to/my/project/dir/index.php on line 5 and defined in /path/to/my/project/dir/index.php:12 Stack trace: #0 /path/to/my/project/dir/index.php(5): printElements(NULL) #1 {main} thrown in /path/to/my/project/dir/index.php on line 12.
Теперь он знает абсолютный путь к файлу, его название, название класса (если есть) и метода, в котором возникло исключение.
Отлавливаются такие ошибки при помощи нормального кода try...catch
, это ясно.
Собственно, вопрос. Нужно ли усиленно отлавливать ошибки, выдающие абсолютные пути к файлам? Чем это может грозить в плане безопасности? Насколько это критично и как злоумышленники могут этим воспользоваться?
А зачем на проде исключения показывать?
Вы должны их ловить к примеру через функцию set_exception_handler:
set_exception_handler(function($exception) {
echo "Текст ошибки: " , $exception->getMessage(), "\n";
});
Теперь пользователи будут видеть только что случилось, а трейс вы должны логировать и уже по логам смотреть что случилось.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Настраиваю приложение которое будет получать посты со стены публичной страницы и постить на сайте, столкнулся с некоторыми непонятностями,...