我设置xdebug
进行错误跟踪,我在登录表单上看到了问题。只要用户尝试登录xdebug
,就会使用username
password
引发堆栈跟踪。现在的问题是如何用占位符字符替换那些*
,以避免记录用户名/密码。
这不是PRODUCTION SERVER
答案 0 :(得分:1)
禁用它!生产应该记录错误,从不显示它们。
答案 1 :(得分:1)
这有点晚了,但我一直在寻找这个问题的答案而且还没找到。这就是我提出的问题。
使用setter(或构造函数)将凭据传递给auth模型,而不是直接将它们传递给任何可能有错误的函数:
class Auth
{
protected
$username=null,
$password=null;
...
public function setCredentials($username,$password)
{
$this->username=$username;
$this->password=$password;
}
public function login()
{
$result=false;
//credentials are not passed to this function
//so if something goes wrong they won't end up
//in the stack trace
...retrieve user record from database...
$result=password_verify($this->password,$data['password_hash']));
if($result)
{
...success - finish logging user in...
}
return $result;
}
...
}
setCredentials函数非常简单,其中没有任何内容会导致抛出异常。
登录功能不会将凭证作为参数,因此如果出现问题,您的密码将不会在堆栈跟踪中结束(而不是Auth :: login(' thisisme&#) 39;,' thisismypassword')在堆栈跟踪中,你会看到Auth :: login())
据我所知,password_verify函数不会抛出异常,但如果你是偏执狂,你可以把它包装在try / catch块中:
try
{
$result=password_verify($this->password,$data['password_hash']));
}
catch(Exception $ex)
{
error_log(get_class($this).'::'.__FUNCTION__.': password_verify() failed.');
}
应使用password_hash()
设置密码哈希