2009-06-13 17 views
50

Immagina di avere un'API del sito che accetta dati sotto forma di richieste GET con parametri o come richieste POST (ad esempio, con codifica url standard, & - dati POST separati). Se si desidera registrare e analizzare le chiamate API, le richieste GET saranno semplici, poiché si troveranno nel registro di apache. C'è un modo semplice per ottenere i dati POST anche nel registro di Apache?Il modo migliore per registrare i dati POST in Apache?

(Naturalmente potremmo registrare i dati POST in modo esplicito nella richiesta, ma mi piacerebbe avere un modo a livello di configurazione che mi permetta di non preoccuparti nel codice.)

+1

questione connessa al ServerFault: http://serverfault.com/questions/51295/logging- http-post-in-apache –

risposta

2

lo farei in l'applicazione, in realtà. È ancora configurabile in fase di esecuzione, a seconda del sistema di registrazione, naturalmente. Ad esempio, se si utilizza Apache Log (log4j/cxx), è possibile configurare un logger dedicato per tali URL e quindi configurarlo in fase di runtime da un file XML.

+0

La mia preoccupazione è che OGNI gestore di API dovrà registrare i dati all'inizio - facile da dimenticare mentre si sta aggiungendo, e nella migliore delle ipotesi è appena stato aggiunto il file di testo. –

+0

Qualsiasi buon framework dovrebbe avere filtri pre e post, o l'equivalente del middleware che ti permetterà di sparare e dimenticare. – blockhead

6

Non esattamente una risposta, ma non ho mai sentito di un modo per farlo in Apache stesso. Immagino che potrebbe essere possibile con un modulo di estensione, ma non so se ne è stato scritto uno.

Una preoccupazione è che i dati POST possono essere piuttosto grandi, e se non si mette un qualche limite su quanto viene registrato, si potrebbe esaurire lo spazio su disco dopo un po '. È una possibile via per gli hacker per fare casino con il tuo server.

+2

Sono d'accordo con la metà successiva completamente! Dato che non ci sono limiti sui dati POST, potrebbe includere tutti i tipi di dati, incluse le password, che non si vorrebbe memorizzare in un registro. Ci sono forse altri dati sicuri e di grandi dimensioni che non vuoi nel registro. –

+2

La registrazione delle password non è un problema, non si stanno comunque inviando password in testo normale, vero? – supo

+7

@supo: anche se le password sono crittografate tramite SSL, verrebbero comunque registrate in testo normale. Ma la particolare preoccupazione che stavo affrontando era riempire il tuo spazio su disco, non esponendo le password nel registro. –

38

Utilizzare Apache mod_dumpio. Fai attenzione per ovvi motivi.

Si noti che mod_dumpio stops logging binary payloads at the first null character. Ad esempio un caricamento di un file gzip'multipart/form-data probabilmente mostrerà solo i primi pochi byte con mod_dumpio.

Si noti inoltre che Apache potrebbe non menzionare questo modulo in httpd.conf anche quando è presente nella cartella /modules. L'aggiunta manuale di LoadModule funzionerà correttamente.

+1

Tipica funzionalità di apache: intera lettura di documenti, tutto configurato e nessun effetto. È una schifezza. – peterh

12

Anche se è tardi per rispondere. Questo modulo può fare: https://github.com/danghvu/mod_dumpost

+1

cool! ha assolutamente senso scaricare i dati dei post per l'analisi dei file di log, ad esempio per tentativi di iniezione sql. – KIC

0

Un'opzione più semplice può essere quella di registrare i dati POST prima che arrivi al server. Per le applicazioni Web, utilizzo Burp Proxy e imposto a Firefox di utilizzarlo come proxy HTTP/S, quindi posso guardare (e manipolare) i dati "sul filo" in tempo reale.

Per fare richieste API senza un browser, SoapUI è molto utile e potrebbe mostrare informazioni simili. Scommetto che probabilmente potresti configurare SoapUI anche per connetterti tramite Burp (solo un'ipotesi).

4

È possibile installare e mettere in mod_security/etc/modsecurity/modsecurity.conf:

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

modsecurity ha pacchetti Ubuntu mentre altri no. –

1

È possibile utilizzare ModSecurity per visualizzare i dati POST.

installare su Debian/Ubuntu:

$ sudo apt install libapache2-mod-security2 

utilizzare il file di configurazione consigliata:

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

e modificare le seguenti righe

SecRuleEngine DetectionOnly 
SecAuditEngine RelevantOnly 

a

SecRuleEngine On 
SecAuditEngine On 

Ricarica Apache:

$ sudo service apache2 reload 

ora troverete i dati registrati sotto /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"} 
Problemi correlati