Лучший способ регистрировать данные 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
будет работать нормально.
Ответ 2
Хотя не поздно ответить. Этот модуль может выполнять следующие действия: https://github.com/danghvu/mod_dumpost
Ответ 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
Вы также можете использовать встроенную функцию журнала судебной экспертизы.