如何在Nginx日志中屏蔽POST正文的敏感信息?

Fra*_*kSu 5 nginx

为了便于分析,我们将该$request_body字段保存在访问日志中。但是,帖子正文中有一些敏感信息,例如密码或信用卡号,这些信息会在日志中显示。我们如何掩盖这些信息?

password=1234asdf  ->  password=****
Run Code Online (Sandbox Code Playgroud)

如果我编写了一个用于屏蔽数据的Nginx模块,我应该编写一个新的日志模块,还是应该在调用原始日志模块之前操纵请求主体?
还是应该使用nginx-lua来实现此目标?
还是还有其他方法?

小智 3

使用“echo_read_request_body”命令获取 HTTP POST 数据,然后使用“map”和正则表达式过滤密码

map $request_body $req_body_start {
    "~(?<nopwd>.*)\&password=[^\&]*.+"  $nopwd;
    default        $request_body;
}

map $request_body $req_body_end {
    "~.*\&password=[^\&]*(?<nopwd1>.+)"  $nopwd1;
    default        '';
}

 map $request_body $req_body_pwd {
    "~.*\&password=[^\&]*.+"  '&password=****';
    default        '';
}
Run Code Online (Sandbox Code Playgroud)

然后定义 log_format 并在服务器/位置级别使用它:

log_format  logreqbody  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$req_body_start$req_body_pwd$req_body_end"';
Run Code Online (Sandbox Code Playgroud)

以下是更多信息: https: //www.rstcloud.net/blog/30-how-to-hide-sensitive-post-data-in-nginx-log