Yii2 Debugger增加密码验证(Basic Auth)防护功能
正常情况下,生产环境不开启Debug,但项目在上线后,难免会出现一些突发的Bug,在并发以及访问量不高的情况下,临时开启Debug可帮助快速排查错误。
为避免重要信息泄露,访问Debugger面板时,可加上密码验证(Basic Auth)功能。
一、入口文件配置Basic Auth
Yii2访问Debugger面板的路由以这种形式为例:example.com/debug,针对这种路由形式,需匹配路由后缀,设置验证的用户名和密码,通过Basic Auth验证才能进行访问。
修改/web/index.php,添加以下内容
// 获取路由的后缀
$route = $_SERVER['REQUEST_URI'];
$parts = array_values(array_filter(explode('/', $route)));
// Debugger加Basic Auth认证
if ($route !== 'debug/default/toolbar' && isset($parts[0]) && $parts[0] === 'debug') {
$user = @$_SERVER['PHP_AUTH_USER'];
$pass = @$_SERVER['PHP_AUTH_PW'];
if (!($user === 'fun' && $pass === 'fun_debug')) {
http_response_code(401);
header('WWW-Authenticate:Basic realm="AUTH"');
exit;
}
}
PHP_AUTH_USER为需要输入的用户名,上述代码设置为fun
PHP_AUTH_PW为用户的密码,上述代码设置为fun_debug
只有这两个值都匹配验证通过,才允许进入Debugger面板。
二、验证测试
配置以上代码之后,访问Debugger面板路径example.com/debug,验证是否需要输入密码
由上可看到提示需要输入密码,Basic Auth正确。加了Basic Auth验证,既方便了调试bug,又给系统增加了一道防护。