Лучший способ регистрировать данные POST в Apache?

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

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

Ответ 1

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

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

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

Ответ 3

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

SecRuleEngine On
SecAuditEngine On
SecAuditLog /var/log/apache2/modsec_audit.log
SecRequestBodyAccess on
SecAuditLogParts ABIJDFHZ

Ответ 4

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

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

Ответ 5

Вы можете использовать [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"}

Ответ 6

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

Ответ 7

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

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

Ответ 8

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