¿La mejor forma de registrar datos POST en Apache?

Imagine que tiene una API de sitio que acepta datos en forma de solicitudes GET con parámetros o como solicitudes POST (por ejemplo, con datos POST estándar codificados en URL y separados). Si desea registrar y analizar llamadas API, las solicitudes GET serán fáciles, porque estarán en el registro de Apache. ¿Hay una manera simple de obtener los datos POST en el registro de Apache también?

(Por supuesto, podríamos registrar los datos de POST explícitamente en la aplicación, pero me gustaría tener una forma de nivel de configuración que me permita no preocuparme por ello en el código).

Usa mod_dumpio de Apache. Tenga cuidado por razones obvias.

Tenga en cuenta que mod_dumpio deja de registrar cargas útiles binarias en el primer carácter nulo . Por ejemplo, una carga multipart/form-data de un archivo gzip’d probablemente solo muestre los primeros bytes con mod_dumpio.

También tenga en cuenta que Apache podría no mencionar este módulo en httpd.conf incluso cuando está presente en la carpeta /modules . Solo agregando manualmente LoadModule funcionará bien.

Aunque es tarde para responder. Este módulo puede hacer: https://github.com/danghvu/mod_dumpost

No es exactamente una respuesta, pero nunca he oído hablar de una forma de hacerlo en Apache. Supongo que podría ser posible con un módulo de extensión, pero no sé si se ha escrito alguna.

Una preocupación es que los datos POST pueden ser bastante grandes, y si no pone algún tipo de límite sobre cuánto se está registrando, es posible que se quede sin espacio en el disco después de un tiempo. Es una ruta posible para que los hackers se metan con tu servidor.

Puede instalar mod_security y ponerlo en /etc/modsecurity/modsecurity.conf :

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

Lo haría en la aplicación, en realidad. Todavía es configurable en tiempo de ejecución, dependiendo de su sistema logger, por supuesto. Por ejemplo, si usa Apache Log (log4j / cxx), puede configurar un registrador dedicado para dichas URL y luego configurarlo en tiempo de ejecución desde un archivo XML.

Puede usar ModSecurity para ver datos POST.

Instalar en Debian / Ubuntu:

 $ sudo apt install libapache2-mod-security2 

Use el archivo de configuración recomendado:

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

Y edita las siguientes líneas

 SecRuleEngine DetectionOnly SecAuditEngine RelevantOnly 

a

 SecRuleEngine On SecAuditEngine On 

Recargar Apache:

 $ sudo service apache2 reload 

Ahora encontrará sus datos registrados en /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"} 

Una opción más fácil puede ser registrar los datos POST antes de que llegue al servidor. Para las aplicaciones web, utilizo Burp Proxy y configuré Firefox para usarlo como un proxy HTTP / S, y luego puedo ver (y modificar) los datos ‘en el cable’ en tiempo real.

Para hacer solicitudes de API sin un navegador, SoapUI es muy útil y puede mostrar información similar. Apuesto a que probablemente también puedas configurar SoapUI para que se conecte a través de Burp (solo una suposición).