Мы регистрируем все исключения, возникающие в нашем коде, с привязкой трассировки стека.
Проблема исходит от этой функции:
public function Authenticate($user, $password)
//Authenticate the user
}
Когда этой функцией выдается исключение, трассировка стека содержит используемые параметры: пароль пользователя отображается в виде простого текста.
Как я могу справиться с этим? Должен ли я переписать функцию аутентификации, чтобы принимать только зашифрованный пароль? Могу ли я запретить этот конкретный параметр для отображения в трассировке стека?
Любая идея приветствуется.
РЕДАКТИРОВАТЬ
Я использую getTraceAsString функция для записи трассировки.
Вы могли бы использовать Исключение :: getTrace () метод сбора информации, и написать свой собственный getTraceAsString()
, не включая параметры.
Смотрите этот пример из комментариев на Exception :: getTrace () документы.
function MakePrettyException(Exception $e) {
$trace = $e->getTrace();
$result = 'Exception: "';
$result .= $e->getMessage();
$result .= '" @ ';
if($trace[0]['class'] != '') {
$result .= $trace[0]['class'];
$result .= '->';
}
$result .= $trace[0]['function'];
$result .= '();<br />';
return $result;
}
Я хотел бы предложить две вещи:
Трассировка стека не должна быть видна на стороне клиента (если еще нет)
Аутентификация должна принимать только хешированную версию пароля
Таким образом, даже если у кого-то есть копия хешированного пароля, он не может использовать ее для входа или использовать ее для изменения пароля.
Идеальный метод, конечно, будет использовать что-то вроде Xdebug, где настройка по умолчанию Параметр collect_params равен 0, значения переменных не отображаются в трассировке стека.