wake-up-neo.com

Am besten loggen Sie sich ein POST Daten in Apache?

Stellen Sie sich vor, Sie verfügen über eine Site-API, die Daten in Form von GET-Anforderungen mit Parametern oder als POST -Anforderungen akzeptiert (z. B. mit Standard-URL-kodierten & -separierten POST - Daten). Wenn Sie API-Aufrufe protokollieren und analysieren möchten, sind die GET-Anforderungen einfach, da sie sich im Apache-Protokoll befinden. Gibt es eine einfache Möglichkeit, die POST -Daten auch im Apache-Protokoll abzurufen? 

(Natürlich können wir die POST -Daten explizit in der Anwendung protokollieren, aber ich hätte gerne eine Konfigurationsebene, auf der ich mich nicht im Code sorgen muss.)

55
Kevin Weil

Verwenden Sie Apaches mod_dumpio . Seien Sie aus offensichtlichen Gründen vorsichtig.

Beachten Sie, dass mod_dumpio die Protokollierung binärer Nutzdaten beim ersten Nullzeichen stoppt. Zum Beispiel zeigt ein multipart/form-data-Upload einer gzip-Datei wahrscheinlich nur die ersten Bytes mit mod_dumpio. 

Beachten Sie auch, dass Apache dieses Modul möglicherweise nicht in httpd.conf erwähnt, selbst wenn es sich im Ordner /modules befindet. Das manuelle Hinzufügen von LoadModule wird problemlos funktionieren.

38
Spider

Obwohl es zu spät ist zu antworten. Dieses Modul kann: https://github.com/danghvu/mod_dumpost

13
w00d

Sie können mod_security installieren und /etc/modsecurity/modsecurity.conf eingeben:

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

Nicht gerade eine Antwort, aber ich habe noch nie von einem Weg in Apache selbst gehört. Ich denke, es ist mit einem Erweiterungsmodul möglich, aber ich weiß nicht, ob eines geschrieben wurde. 

Ein Problem ist, dass POST -Daten ziemlich groß sein können, und wenn Sie die Anzahl der protokollierten Daten nicht einschränken, können Sie nach einer Weile nicht mehr auf der Festplatte sein. Es ist ein möglicher Weg für Hacker, sich mit Ihrem Server zu beschäftigen.

7
David Z

Sie können [ModSecurity][1] verwenden, um POST -Daten anzuzeigen.

Installation unter Debian/Ubuntu:

$ Sudo apt install libapache2-mod-security2

Verwenden Sie die empfohlene Konfigurationsdatei:

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

Apache neu laden:

$ Sudo service Apache2 reload

Sie finden Ihre Daten nun unter /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
hg8

Ich würde es eigentlich in der Anwendung tun. Es ist natürlich zur Laufzeit noch konfigurierbar, abhängig von Ihrem Loggersystem. Wenn Sie beispielsweise Apache Log (log4j/cxx) verwenden, können Sie einen dedizierten Logger für solche URLs konfigurieren und ihn dann zur Laufzeit anhand einer XML-Datei konfigurieren.

2
Assaf Lavie

Sie können auch die integrierte forensische Protokollfunktion verwenden.

0
Aeyoun

Eine einfachere Option kann sein, die POST -Daten zu protokollieren, bevor sie an den Server gelangen. Für Webanwendungen verwende ich Burp Proxy und setze Firefox so ein, dass es als HTTP/S-Proxy verwendet wird. Dann kann ich Daten "auf dem Draht" in Echtzeit überwachen (und zerstören). 

Für API-Anforderungen ohne Browser ist SoapUI sehr nützlich und kann ähnliche Informationen anzeigen. Ich würde wetten, dass Sie SoapUI wahrscheinlich auch so konfigurieren können, dass es sich durch Burp verbindet (nur eine Vermutung).

0
siliconrockstar