Logging yii2日志目标掩码
我正在使用Yii2框架,需要找到一种方法来保护日志文件中的敏感数据 考虑以下日志转储Logging yii2日志目标掩码,logging,yii2,Logging,Yii2,我正在使用Yii2框架,需要找到一种方法来保护日志文件中的敏感数据 考虑以下日志转储 $_POST = [ '_csrf' => 'VzVDNC03aXk9BAhOYEMPPzkDG2BvQwELDwZuV2VzUDUjTSJuRl4FCQ==' 'CreditCardForm' => [ 'card_number' => '4111111111111111' 'exp_month' => '02' 'exp_year' => '16'
$_POST = [
'_csrf' => 'VzVDNC03aXk9BAhOYEMPPzkDG2BvQwELDwZuV2VzUDUjTSJuRl4FCQ=='
'CreditCardForm' => [
'card_number' => '4111111111111111'
'exp_month' => '02'
'exp_year' => '16'
'cardholder_name' => 'Jane Doe'
'agreement' => '1'
]
]
我想在不接触框架文件的情况下,以可移植的方式修改\yii\log\Target.getContextMessage()的行为,以便屏蔽信用卡号的前12位数字
我目前的想法是在将值复制到进行处理的模型中之后,修改$u POST global
还有其他建议吗?您可以选择使用配置文件将日志路由的配置更改为不包含POST,并更改
logVars
的内容。如果您根本不需要superglobals,您可以将其设置为[]
例如:
另一种选择是覆盖您使用的
目标类,并在返回数据之前更新getContextMessage()
函数以删除/模糊信用卡号。在web/index.php中,我添加了以下内容
global $SAFE_POST;
if(is_array($_POST)) {
$SAFE_POST = $_POST;
array_walk_recursive($SAFE_POST,function(&$value,$key) {
if($key == 'card_number' && is_string($value)) {
if(strlen($value) <= 4)
$value = str_repeat('X',strlen($value));
else
$value = str_repeat('X',strlen($value)-4).substr($value,-4);
}
});
}
我正在考虑将logVars中的POST替换为一个新的、屏蔽的POST global,我将在启动序列的早期创建它,可能是在web/index.php中
global $SAFE_POST;
if(is_array($_POST)) {
$SAFE_POST = $_POST;
array_walk_recursive($SAFE_POST,function(&$value,$key) {
if($key == 'card_number' && is_string($value)) {
if(strlen($value) <= 4)
$value = str_repeat('X',strlen($value));
else
$value = str_repeat('X',strlen($value)-4).substr($value,-4);
}
});
}
log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning', 'info'],
'logVars' => ['_GET', 'SAFE_POST', '_FILES', '_COOKIE', '_SESSION', '_SERVER']
],
],
],