Nginx 映射 \x22password\x22 以隐藏 POST 日志记录



我的日志记录设置为将$request_body注销到系统日志,但它在日志中包含敏感数据。

例如,当用户登录时,密码在日志中显示为x22passwordx22。目前,我想保留周围的数据并仅混淆密码。

例如,当用户登录并 POST 到身份验证后端时,它被记录为

body: "{x22usernamex22:x22myname@mydomain.comx22,x22passwordx22:x22One2Three4!?x22}"

但我希望它被记录为

body: "{x22usernamex22:x22myname@mydomain.comx22,x22passwordx22:x22********x22}"

我已经看到有一种在典型的查询字符串参数格式中映射字段的能力,但我对正则表达式并不是特别熟练。

我在这里看过NGINX:在access_log中混淆密码,但这个问题没有得到回答。希望在此问题上获得一些正则表达式指导,而不考虑最佳实践和安全问题。

如何使用这种格式的响应正文在日志记录中混淆密码?

让我们先尝试一些调试。这是应该工作的正则表达式,但我不确定如果密码包含x22}x22,子字符串,它将如何表现。你能测试一下吗?

map $request_body $obfuscated_request_body {
"~(.*[{,]\x22password\x22:\x22).*?(\x22[,}].*)" $1********$2;
default $request_body;
}

$request_body替换为log_format指令参数中的$obfuscated_request_body。请注意,map块应放置在server之外

更新 1

似乎x22子字符串将在日志文件中显示为x5Cx5Cx22,因此正则表达式必须在任何情况下都可行。

最新更新