Yii2日志配置:如何正确排除密码等敏感变量?
解决Yii2日志中LoginForm密码泄露的问题
我之前也踩过这个坑!Yii2的logVars配置对嵌套数组字段的写法有特定要求,你之前用的点分隔符是不对的,得用方括号来指定数组层级才能生效。
正确的配置方式
要排除_POST里的LoginForm[password]字段,你需要在日志组件的配置里这样写:
'components' => [ 'log' => [ 'targets' => [ [ 'class' => 'yii\log\FileTarget', // 保留默认日志变量,同时排除LoginForm的密码字段 'logVars' => [ '_GET', '_POST', '_FILES', '_COOKIE', '_SESSION', '_SERVER', '!_POST[LoginForm][password]' ], // 可根据需求添加其他日志配置,比如levels、categories等 ], ], ], ],
为什么之前的写法不生效?
Yii2在解析logVars的排除规则时,针对_POST这类数组型变量,必须用方括号[]来定位嵌套的键名。你之前尝试的!LoginForm.password或!_POST.LoginForm.password,会被系统识别成独立的变量名(而非_POST数组下的子字段),自然匹配不到表单里的密码参数。
扩展:排除多个敏感字段
如果还有其他表单的密码或敏感字段需要排除,直接在logVars里追加类似规则即可:
'logVars' => [ '_GET', '_POST', '_FILES', '_COOKIE', '_SESSION', '_SERVER', '!_POST[LoginForm][password]', '!_POST[User][new_password]', '!_POST[ResetPasswordForm][password]' ],
这样配置后,日志文件里就不会再出现这些敏感的密码字段啦!
内容的提问来源于stack exchange,提问作者Nickolay
相关产品推荐
相关产品推荐

