2009-06-13 13 views
50

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 codificación de URL estándar, &-datos de POST 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?¿La mejor manera de registrar datos POST en Apache?

(Por supuesto, podríamos registrar los datos POST explícitamente en la solicitud, pero me gustaría tener una manera de nivel de configuración que no sea yo preocupo por ella en el código.)

+1

pregunta relacionada en ServerFault: http://serverfault.com/questions/51295/logging- http-post-in-apache –

Respuesta

2

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.

+0

Mi preocupación es que TODOS los manejadores de API tendrán que registrar los datos al principio, es fácil olvidarlos mientras los agrega, y en el mejor de los casos se acaban de agregar. –

+0

Cualquier buen marco debería tener filtros previos y posteriores, o el equivalente de middleware que le permitirá disparar y olvidar. – blockhead

6

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

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

+2

Estoy de acuerdo con la mitad posterior completamente! Como no hay límite en los datos POST, podría incluir todo tipo de datos, incluidas contraseñas, que no le gustaría guardar en un registro. Es posible que haya otros datos seguros y grandes que no desee en el registro. –

+2

Contraseñas de registro no es un problema, de todos modos no está enviando contraseñas en texto plano, ¿verdad? – supo

+7

@supo: incluso si las contraseñas están cifradas a través de SSL, todavía se registrarán en texto sin formato. Pero la preocupación particular a la que me refería era llenar el espacio de tu disco, sin exponer contraseñas en el registro. –

38

Utilice Apache mod_dumpio. Tenga cuidado por razones obvias.

Tenga en cuenta que mod_dumpio stops logging binary payloads at the first null character. 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.

+1

Característica típica de apache: lectura completa de documentos, todo configurado y sin efecto. Es una mierda. – peterh

12

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

+1

¡genial! tiene sentido absolutamente volcar los datos de la publicación para el análisis del archivo de registro, es decir, para cosas como los intentos de inyección de sql. – KIC

0

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 utilizarlo 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).

4

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

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

modsecurity tiene paquetes de Ubuntu mientras que otros no. –

1

Puede utilizar ModSecurity para ver los datos POST.

Instalación en Debian/Ubuntu:

$ sudo apt install libapache2-mod-security2 

utilizar el archivo de configuración recomendada:

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

y editar las siguientes líneas

SecRuleEngine DetectionOnly 
SecAuditEngine RelevantOnly 

a

SecRuleEngine On 
SecAuditEngine On 

Actualizar Apache:

$ sudo service apache2 reload 

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