我有一个 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 编码,或者自己进行十六进制转换。