2012-03-30 13 views
34

¿Cómo hacer un registro en el archivo de registro del contenido del encabezado de la solicitud HTTP (todo) tal como lo recibió apache?¿Es posible registrar todos los encabezados de solicitud HTTP con Apache?

Actualmente mi configuración de formato de registro combinado de Apache es:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined

entiendo que es posible hacerlo así:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{heading name}i\" \"%{heading name}i\" \"%{heading name}i\"" combined

pero no es lógico y es no es posible saber qué encabezados serán.

Respuesta

10

Aquí está una lista de todos http-headers: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

Y aquí es una lista de todos los Apache-logformats: http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formats

A medida que has escrito correctamente, el código para darse una cabecera específica es% {foobar} i donde foobar es el nombre del encabezado. Entonces, la única solución es crear una cadena de formato específica. Cuando espere un encabezado no estándar como x-my-non-standard-header, use %{x-my-nonstandard-header}i. Si su servidor va a ignorar este encabezado no estándar, ¿por qué debería escribirlo en su archivo de registro? Un encabezado desconocido no tiene ningún efecto en su sistema.

+3

Todavía es lo suficientemente útil para poder registrar todos los encabezados HTTP que se pasan a la máquina apache. Preferiría tener un sistema más flexible que tener que editar el 'LogFormat' cada vez que se introduce un nuevo encabezado. –

+1

¡He iniciado sesión deliberadamente para votar esta respuesta! – rofans91

40

mod_log_forensic es lo que desea, pero puede que no esté incluido/disponible con su instalación de Apache de manera predeterminada.

Aquí se explica cómo usarlo.

LoadModule log_forensic_module /usr/lib64/httpd/modules/mod_log_forensic.so 
<IfModule log_forensic_module> 
ForensicLog /var/log/httpd/forensic_log 
</IfModule> 
+11

Gracias, esta es la respuesta correcta. Aquí le mostramos cómo configurarlo en httpd.conf. (Uf, no hay saltos de línea en los comentarios ??) 'LoadModule log_forensic_module/usr/lib64/httpd/modules/mod_log_forensic.so' ' ForensicLog/var/log/httpd/forensic_log ' Ahora usted puede compruebe [Shellshock] (http://www.troyhunt.com/2014/09/everything-you-need-to-know-about.html) intente de la siguiente manera: 'grep"() {"/ var/log/httpd/forensic_log' – Raptor007

5

Si está interesado en ver las cabeceras de un cliente remoto está enviando a su servidor, y puede causar la solicitud para ejecutar un script CGI específica, a continuación, la solución más sencilla es tener la secuencia de comandos del servidor volcar el variables de entorno en un archivo en alguna parte.

p. Ej. ejecutar el comando shell "env>/tmp/cabeceras" de dentro de la secuencia de comandos

A continuación, busque las variables de entorno que comienzan con HTTP _...

Va a encontrar líneas como

HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
HTTP_ACCEPT_ENCODING=gzip, deflate 
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5 
HTTP_CACHE_CONTROL=max-age=0 

Cada uno de ellos representa un encabezado de solicitud.

Tenga en cuenta que los nombres de los encabezados se modifican a partir de la solicitud real. Por ejemplo, "Aceptar Idioma" se convierte en "HTTP_ACCEPT_LANGUAGE", y así sucesivamente.

Cuestiones relacionadas