Назад | Перейти на главную страницу

nginx logging $ тело запроса производит странную кодировку

У меня есть сервер 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 [число] обозначает шестнадцатеричный формат. Цитаты отбрасывают анализаторы журналов (в основном те, которые предполагают, что он будет использовать apache Общий формат журнала который окружает запросы кавычками, чтобы сохранить вместе метод, URL-адрес и версию). Это выглядит как кто-то жаловался на цитаты, который (вместе с уязвимостью терминального побега инъекции) - вот что привело к побегу. Похоже, патч так и не был изменен, чтобы вы могли его выключить.

Вам нужно будет разобрать их на своей стороне. Вы можете заменить \ x на%, чтобы соответствовать кодировке URL, или просто выполнить шестнадцатеричное преобразование самостоятельно.