2014-10-03 7 views
3

우리는 코드에서 발생하는 모든 예외를 스택 추적과 관련하여 기록합니다.인수 as password as stack-trace

문제는이 함수에서 온다 :

예외가이 기능에 의해 발생합니다
public function Authenticate($user, $password) 
    //Authenticate the user 
} 

는, 스택 추적이 사용되는 매개 변수를 포함합니다 : 사용자 암호는 일반 텍스트로 표시됩니다.

어떻게 처리 할 수 ​​있습니까? 암호화 된 암호 만 받아들이도록 Authenticate 함수를 다시 작성해야합니까? 이 특정 매개 변수가 스택 추적에 표시되지 않도록 할 수 있습니까?

모든 아이디어를 환영합니다.

편집은 내가 추적을 로그인 할 getTraceAsString 기능을 사용합니다.

+0

기본 Exception :: getTrace()를 사용하고 있습니까? xdebug에는 [collect params] (http://xdebug.org/docs/all_settings#collect_params) 설정이 유용 할 수 있습니다. –

+0

1 초 핫픽스는'preg_replace'를 사용하여'Exception :: getTraceAsString'에 대한 호출을 감쌀 것입니다. – mudasobwa

답변

2

Exception::getTrace() 메서드를 사용하여 정보를 수집하고 매개 변수를 제외하고 사용자 지정 getTraceAsString()을 작성할 수 있습니다.

See this example 댓글에서 Exception::getTrace() docs.

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

당신의 대답은 정말로 도움이되었지만이 기능은 단지 마지막 기능을 기록합니다. 나는 이것을 대신 사용하기로 결정했다 : http://php.net/manual/fr/exception.gettraceasstring.php#114980 – Getz

1

두 가지 내가 제안 :

  1. 스택 추적은 클라이언트 측에서 볼 수 안 (아직없는 경우)

  2. 하여 인증은 암호의 해시 된 버전을 받아 들여야한다

그런 식으로 해시 된 암호의 복사본이있는 사람은 로그인하여 암호를 되돌릴 수 없습니다.

이상적인 방법은 collect_params is 0의 기본 설정 인 스택 트레이스에 변수가 표시되지 않음을 의미하는 Xdebug과 같은 것을 사용하는 것입니다.

+0

감사합니다. 스택 트레이스는 클라이언트에 의해 관리자 만 볼 수는 없지만 어쨌든 사용자의 비밀번호를 볼 필요는 없습니다. 우리는 Xdebug를 사용하지만, 개발 환경이 아니라 생산 환경에서만 사용됩니다. – Getz