2009-06-13 7 views
50

Wyobraź sobie, że masz interfejs API witryny, który akceptuje dane w postaci żądań GET z parametrami lub jako żądania POST (np. Ze standardowymi kodowanymi adresami URL, & -separowane dane POST). Jeśli chcesz logować się i analizować wywołania API, żądania GET będą łatwe, ponieważ znajdą się w dzienniku apache. Czy istnieje prosty sposób uzyskania danych POST również w dzienniku apache?Najlepszy sposób na rejestrowanie danych POST w Apache?

(Oczywiście możemy rejestrować dane POST wyraźnie we wniosku, ale chciałbym mieć drogę konfiguracja poziomu, który pozwoli mi nie martwić się o to w kodzie).

+1

Podobne pytania w ServerFault: http://serverfault.com/questions/51295/logging- http-post-in-apache –

Odpowiedz

2

zrobiłbym to w w rzeczywistości aplikacja. Nadal można go konfigurować w czasie wykonywania, oczywiście w zależności od systemu rejestratora. Na przykład, jeśli korzystasz z Loga Apache (log4j/cxx), możesz skonfigurować dedykowany program rejestrujący dla takich URL-i, a następnie skonfigurować go w środowisku wykonawczym z pliku XML.

+0

Moją obawą jest to, że KAŻDY program obsługi API będzie musiał rejestrować dane na początku - łatwo je zapomnieć, gdy dodajesz, aw najlepszym razie to tylko dodany zestaw znaków. –

+0

Każda dobra struktura powinna mieć filtry wstępne i końcowe, lub odpowiednik oprogramowania pośredniego, które pozwoli ci strzelać i zapomnieć. – blockhead

6

Niezupełnie odpowiedź, ale nigdy nie słyszałem o sposobie, aby to zrobić w samym Apache. Sądzę, że może to być możliwe z modułem rozszerzenia, ale nie wiem, czy został napisany.

Jedną z obaw jest to, że dane POST mogą być dość duże, a jeśli nie wprowadzi się pewnego rodzaju ograniczenia co do ilości rejestrowanych danych, po pewnym czasie może zabraknąć miejsca na dysku. Jest to prawdopodobna droga dla hakerów, aby zepsuć serwer.

+2

Zgadzam się z drugą połową całkowicie! Ponieważ nie ma limitu danych POST, może on zawierać wszystkie rodzaje danych, w tym hasła, których nie chcesz przechowywać w dzienniku. Być może w dzienniku nie ma innych bezpiecznych i dużych danych, których nie chcesz. –

+2

Rejestracja haseł nie jest problemem, nie wysyłając hasła w formie zwykłego tekstu, prawda? – supo

+7

@ oo: nawet jeśli hasła są szyfrowane za pomocą protokołu SSL, nadal będą rejestrowane w postaci zwykłego tekstu. Ale szczególną troską, na którą zwracałem uwagę, było zapełnianie przestrzeni dyskowej, a nie ujawnianie haseł w dzienniku. –

38

Użyj Apache's mod_dumpio. Zachowaj ostrożność z oczywistych powodów.

Zauważ, że mod_dumpio stops logging binary payloads at the first null character. Na przykład przesłanie pliku gzip'd do formatu multipart/form-data będzie prawdopodobnie pokazywać tylko kilka pierwszych bajtów przy użyciu polecenia mod_dumpio.

Należy również zauważyć, że Apache może nie wspomnieć o tym module w httpd.conf, nawet jeśli jest obecny w folderze /modules. Wystarczy ręcznie dodać LoadModule będzie działać dobrze.

+1

Typowa funkcja apache: cały dokument został przeczytany, wszystko skonfigurowane i brak efektu. To bzdura. – peterh

12

Chociaż jest późno na odpowiedź. Ten moduł może: https://github.com/danghvu/mod_dumpost

+1

fajne! w sensie bezwzględnie sensownym jest zrzucanie danych postów do analizy plików logów, np. w przypadku takich prób, jak próby wstrzyknięcia sql. – KIC

0

Łatwiejszym rozwiązaniem może być rejestrowanie danych POST, zanim dotrze do serwera. W przypadku aplikacji internetowych używam Burp Proxy i ustaw Firefoxa na używanie go jako proxy HTTP/S, a następnie mogę oglądać (i szyć) dane "na drucie" w czasie rzeczywistym.

Do tworzenia żądań API bez przeglądarki, SoapUI jest bardzo użyteczne i może wyświetlać podobne informacje. Mogłabym się założyć, że prawdopodobnie mógłbyś skonfigurować SoapUI, aby połączyć się również z Burpem (tylko zgadnij).

4

Można zainstalować mod_security i umieścić w /etc/modsecurity/modsecurity.conf:

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

Modsecurity ma pakiety Ubuntu, a inne nie. –

1

Można użyć ModSecurity aby zobaczyć dane POST.

Instalacja na Debian/Ubuntu:

$ sudo apt install libapache2-mod-security2 

Użyj zalecanej plik konfiguracyjny:

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

i edytować następujące linie

SecRuleEngine DetectionOnly 
SecAuditEngine RelevantOnly 

do

SecRuleEngine On 
SecAuditEngine On 

Odśwież Apache:

$ sudo service apache2 reload 

Będziesz teraz znaleźć dane rejestrowane pod /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"} 
Powiązane problemy