Yii2 Debugger增加密码验证(Basic Auth)防护功能

作者:IT技术圈子 浏览量:320   发表于 2023-09-23 11:41 标签:

   正常情况下,生产环境不开启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,验证是否需要输入密码

yyy

由上可看到提示需要输入密码,Basic Auth正确。加了Basic Auth验证,既方便了调试bug,又给系统增加了一道防护。