Пароль в качестве аргумента отображается в трассировке стека

Мы регистрируем все исключения, возникающие в нашем коде, с привязкой трассировки стека.

Проблема исходит от этой функции:

public function Authenticate($user, $password)
//Authenticate the user
}

Когда этой функцией выдается исключение, трассировка стека содержит используемые параметры: пароль пользователя отображается в виде простого текста.

Как я могу справиться с этим? Должен ли я переписать функцию аутентификации, чтобы принимать только зашифрованный пароль? Могу ли я запретить этот конкретный параметр для отображения в трассировке стека?

Любая идея приветствуется.

РЕДАКТИРОВАТЬ

Я использую getTraceAsString функция для записи трассировки.

5

Решение

Вы могли бы использовать Исключение :: 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;
}
2

Другие решения

Я хотел бы предложить две вещи:

  1. Трассировка стека не должна быть видна на стороне клиента (если еще нет)

  2. Аутентификация должна принимать только хешированную версию пароля

Таким образом, даже если у кого-то есть копия хешированного пароля, он не может использовать ее для входа или использовать ее для изменения пароля.

Идеальный метод, конечно, будет использовать что-то вроде Xdebug, где настройка по умолчанию Параметр collect_params равен 0, значения переменных не отображаются в трассировке стека.

1

По вопросам рекламы [email protected]