2012-03-30 1 views
34

Wie ein Datensatz in die Protokolldatei den Inhalt der HTTP-Anfrage-Header (alle) wie von Apache empfangen?Ist es möglich, alle HTTP-Request-Header mit Apache zu protokollieren?

Derzeit mein Apache kombiniert Logformat Konfiguration ist:

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

Ich verstehe, dass es möglich ist, es zu tun, so:

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

aber es nicht logisch ist, und es ist nicht möglich zu wissen, welche Header sein werden. Hier

Antwort

10

ist eine Liste aller http-Header: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

Und hier ist eine Liste aller Apache-logformats: http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formats

Wie Sie richtig geschrieben hat, wird der Code für einen bestimmten Header-Anmeldung ist% {foobar} i wobei foobar der Name des Headers ist. Die einzige Lösung besteht darin, eine bestimmte Formatzeichenfolge zu erstellen. Wenn Sie einen nicht standardmäßigen Header wie x-my-nonstandard-header erwarten, verwenden Sie %{x-my-nonstandard-header}i. Wenn Ihr Server diesen nicht standardmäßigen Header ignoriert, warum sollten Sie ihn in Ihre Logdatei schreiben wollen? Ein unbekannter Header hat absolut keine Auswirkungen auf Ihr System.

+3

Es ist immer noch nützlich genug, um alle HTTP-Header protokollieren zu können, die an den Apache-Computer übergeben werden. Ich hätte lieber ein flexibleres System, als jedes Mal, wenn ein neuer Header eingeführt wird, das 'LogFormat' zu bearbeiten. –

+1

Ich absichtlich angemeldet, um diese Antwort zu bewerten! – rofans91

40

mod_log_forensic ist, was Sie wollen, aber es kann nicht mit Ihrem Apache installiert standardmäßig enthalten/verfügbar werden.

Hier ist, wie es zu benutzen.

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

Danke, das ist die richtige Antwort. Hier erfahren Sie, wie Sie das in httpd.conf einrichten. (Ugh, keine Zeilenumbrüche in den Kommentaren ??) 'LoadModule- log_forensic_module/usr/lib64/httpd/modules/mod_log_forensic.so' ' ForensicLog/var/log/httpd/forensic_log ' Jetzt können Sie check for [Shellshock] (http://www.troyhunt.com/2014/09/everything-you-need-to-know-about.html) Versuche wie folgt: 'grep"() {"/ var/log/httpd/forensisches_log' – Raptor007

5

Wenn Sie in dem Sehen interessiert sind, die bestimmten Header ein Remote-Client auf dem Server sendet, und Sie können die Anfrage veranlassen, einen CGI-Skript ausgeführt werden soll, dann ist die einfachste Lösung, um Ihren Server-Skript haben, ist Dump die Umgebungsvariablen in eine Datei irgendwo.

z.B. Führen Sie den Shell-Befehl "env>/tmp/Header" aus dem Skript

Dann suchen Sie die Umgebungsvariablen, die mit HTTP beginnen _...

Sie sehen Zeilen wie:

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 

Jeder von diesen stellt einen Anforderungsheader dar.

Beachten Sie, dass die Header-Namen von der tatsächlichen Anfrage geändert werden. Zum Beispiel wird "Accept-Language" zu "HTTP_ACCEPT_LANGUAGE" und so weiter.

Verwandte Themen