2009-06-13 10 views
50

Stellen Sie sich vor, Sie haben eine Website-API, die Daten in Form von GET-Anfragen mit Parametern oder als POST-Anfragen akzeptiert (z. B. mit Standard-URL-codierten, &-getrennten 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 in das Apache-Protokoll zu bekommen?Die beste Methode, POST-Daten in Apache zu protokollieren?

(Natürlich könnten wir die POST-Daten explizit in der Anwendung anmelden, aber ich möchte ein Konfigurationsebene Weg haben, die mir nicht darüber im Code lassen befürchten.)

+1

Verwandte Frage an ServerFault finden: http://serverfault.com/questions/51295/logging- http-Post-in-Apache –

Antwort

2

ich es tun würde in die Anwendung, eigentlich. Es ist natürlich immer noch konfigurierbar zur Laufzeit, 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 aus einer XML-Datei konfigurieren.

+0

Meine Sorge dort ist, dass jeder API-Handler die Daten am Anfang protokollieren müssen - leicht zu vergessen, wie Sie hinzufügen, und im besten Fall ist es einfach hinzugefügt Standard. –

+0

Jeder gute Rahmen sollte Pre-und Post-Filter haben, oder das Äquivalent von Middleware, mit denen Sie schießen und vergessen können. – blockhead

6

Nicht genau eine Antwort, aber ich habe nie von einem Weg gehört, dies in Apache selbst zu tun. Ich denke, dass es mit einem Erweiterungsmodul möglich sein könnte, aber ich weiß nicht, ob einer geschrieben wurde.

Ein Problem ist, dass POST-Daten ziemlich groß sein können, und wenn Sie keine Art von Limit für die Protokollierung setzen, könnte nach einiger Zeit der Speicherplatz nicht mehr ausreichen. Es ist ein möglicher Weg für Hacker, sich mit Ihrem Server zu messen.

+2

Ich stimme der späteren Hälfte komplett zu! Da es für die POST-Daten keine Beschränkung gibt, kann es alle Arten von Daten enthalten, einschließlich Kennwörter, die Sie nicht in einem Protokoll speichern möchten. Möglicherweise möchten Sie andere sichere und große Daten im Protokoll speichern. –

+2

Das Protokollieren von Passwörtern ist kein Problem, Sie senden keine Passwörter im Klartext, oder? – supo

+7

@supo: Auch wenn die Passwörter über SSL verschlüsselt sind, würden sie immer noch im Klartext geloggt werden. Aber die besondere Sorge, die ich ansprach, war das Auffüllen Ihres Speicherplatzes, nicht die Freigabe von Passwörtern im Protokoll. –

38

Verwenden Sie Apache mod_dumpio. Aus offensichtlichen Gründen vorsichtig sein.

Beachten Sie, dass mod_dumpio stops logging binary payloads at the first null character. Zum Beispiel wird ein multipart/form-data Upload einer gzip'd-Datei wahrscheinlich nur die ersten paar Bytes mit mod_dumpio anzeigen.

Beachten Sie auch, dass Apache dieses Modul möglicherweise nicht in httpd.conf erwähnt, auch wenn es im Ordner /modules vorhanden ist. Nur manuell hinzufügen LoadModule wird gut funktionieren.

+1

Typische Apache-Funktion: gesamtes Dokument lesen, alles eingerichtet und kein Effekt. Es ist ein Mist. – peterh

12

Obwohl es zu spät ist zu antworten. Dieses Modul kann:

+1

cool! Es macht absolut Sinn, Post-Daten für Logfile-Analyse, d. h. für Dinge wie sql injection Versuche. – KIC

0

Eine einfachere Option kann sein, die POST-Daten zu protokollieren, bevor es auf den Server kommt. Für Web-Anwendungen verwende ich Burp Proxy und setze Firefox als HTTP/S-Proxy, und dann kann ich Daten "on the wire" in Echtzeit ansehen (und zerlegen).

Für die Erstellung von API-Anfragen ohne Browser ist SoapUI sehr nützlich und kann ähnliche Informationen anzeigen. Ich würde wetten, dass Sie wahrscheinlich SoapUI konfigurieren können, um sich auch über Burp zu verbinden (nur eine Vermutung).

4

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

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

modsecurity hat Ubuntu-Pakete, andere nicht. –

1

Sie ModSecurity POST-Daten anzeigen können.

Install auf Debian/Ubuntu:

$ sudo apt install libapache2-mod-security2 

die empfohlene Konfigurationsdatei verwenden:

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

und bearbeiten Sie die folgenden Zeilen

SecRuleEngine DetectionOnly 
SecAuditEngine RelevantOnly 

zu

SecRuleEngine On 
SecAuditEngine On 

Reload Apache:

$ sudo service apache2 reload 

Sie jetzt Ihre Daten protokolliert 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"} 
Verwandte Themen