Лучший способ записать данные POST в Apache? - PullRequest
55 голосов
/ 13 июня 2009

Представьте, что у вас есть API сайта, который принимает данные в форме GET-запросов с параметрами или в виде POST-запросов (скажем, со стандартными URL-кодированными и разделенными POST-данными). Если вы хотите регистрировать и анализировать вызовы API, запросы GET будут простыми, потому что они будут в журнале apache. Есть ли простой способ получить данные POST в журнале apache?

(Конечно, мы могли бы явно регистрировать данные POST в приложении, но я хотел бы иметь способ на уровне конфигурации, который позволил бы мне не беспокоиться об этом в коде.)

Ответы [ 8 ]

38 голосов
/ 08 февраля 2010

Используйте Apache mod_dumpio . Будьте осторожны по понятным причинам.

Обратите внимание, что mod_dumpio прекращает регистрировать двоичные полезные данные с первым нулевым символом . Например, при загрузке multipart/form-data файла gzip, вероятно, будут показаны только первые несколько байтов с mod_dumpio.

Также обратите внимание, что Apache может не упомянуть этот модуль в httpd.conf, даже если он присутствует в папке /modules. Просто добавление LoadModule вручную будет работать нормально.

13 голосов
/ 09 декабря 2012

Хотя уже поздно отвечать. Этот модуль может делать: https://github.com/danghvu/mod_dumpost

10 голосов
/ 13 июля 2016

Вы можете установить mod_security и вставить /etc/modsecurity/modsecurity.conf:

SecRuleEngine On
SecAuditEngine On
SecAuditLog /var/log/apache2/modsec_audit.log
SecRequestBodyAccess on
SecAuditLogParts ABIJDFHZ
7 голосов
/ 13 июня 2009

Не совсем ответ, но я никогда не слышал о способах сделать это в самом Apache. Я думаю, это может быть возможно с модулем расширения, но я не знаю, был ли он написан.

Одной из проблем является то, что данные POST могут быть довольно большими, и если вы не установите какое-либо ограничение на объем регистрируемого файла, через некоторое время может закончиться свободное место на диске. Это возможный маршрут для хакеров связываться с вашим сервером.

6 голосов
/ 23 ноября 2017

Вы можете использовать [ModSecurity][1] для просмотра данных POST.

Установка в Debian / Ubuntu:

$ sudo apt install libapache2-mod-security2

Используйте рекомендуемый файл конфигурации:

$ sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Перезагрузить Apache:

$ sudo service apache2 reload

Теперь вы найдете ваши данные, зарегистрированные в /var/log/apache2/modsec_audit.log

$ tail -f /var/log/apache2/modsec_audit.log
--2222229-A--
[23/Nov/2017:11:36:35 +0000] 
--2222229-B--
POST / HTTP/1.1
Content-Type: application/json
User-Agent: curl
Host: example.com

--2222229-C--
{"test":"modsecurity"}
2 голосов
/ 13 июня 2009

Я бы сделал это в приложении, на самом деле. Это все еще настраивается во время выполнения, конечно, в зависимости от вашей системы регистрации. Например, если вы используете Apache Log (log4j / cxx), вы можете настроить выделенный регистратор для таких URL-адресов и затем настроить его во время выполнения из файла XML.

0 голосов
/ 17 октября 2018

Вы также можете использовать встроенную функцию журнала судебной экспертизы.

0 голосов
/ 30 июня 2016

Более простым вариантом может быть регистрация данных POST до того, как они попадут на сервер. Для веб-приложений я использую Burp Proxy и настраиваю Firefox использовать его в качестве HTTP / S-прокси, а затем я могу наблюдать (и искажать) данные «по проводам» в режиме реального времени.

Для отправки запросов API без браузера, SoapUI очень полезен и может показывать похожую информацию. Могу поспорить, что вы, вероятно, также можете настроить SoapUI для подключения через Burp (только предположение).

...