nginx loggin $request_body 产生奇怪的编码

nginx loggin $request_body 产生奇怪的编码

我有一个 nginx 服务器,它将 POST $request_body 记录到文件中。当我将 json 发布到服务器时,它会将引号 (") 替换为 \x22。

我的配置如下

server {
    server_name myServer;
    listen 8180;
    log_format logMyServer '$request_body';
    location /myServer {
        access_log  /var/log/nginx/request_bodies.log logMyServer;
        proxy_pass http://127.0.0.1:8000/;

        break;
    }
}

以下是我生成请求的方式:

curl -H "Content-Type: application/json" -X POST -d '{"some":{"foo":"bar"}}' localhost:8180/myServer/

我的问题是:

  • \x[number] 是什么类型的编码?
  • 有什么方法可以配置日志以包含引号而不是 \x22?

答案1

\x[number] 表示十六进制。引号会干扰日志分析器(大多数假设它会使用 apache 的常见日志格式用引号括住请求,以便将方法、URL 和版本放在一起)。它看起来像有人抱怨引言, 哪个 (以及终端逃逸注入漏洞) 是导致越狱的原因。看来补丁从未被修改过,以便您将其关闭。

您需要在您的终端解析它们。您可以用 % 替换 \x 以匹配 URL 编码,或者自己进行十六进制转换。

相关内容