2009-06-13 2 views
50

매개 변수가 포함 된 GET 요청 또는 POST 요청 (예 : 표준 URL 인코딩, & - 분리 된 POST 데이터)의 형식으로 데이터를 허용하는 사이트 API가 있다고 가정 해보십시오. API 호출을 로그하고 분석하려면 GET 요청이 아파치 로그에 저장되기 때문에 쉽습니다. 아파치 로그에서도 POST 데이터를 얻을 수있는 간단한 방법이 있습니까?Apache에서 POST 데이터를 기록하는 가장 좋은 방법은 무엇입니까?

(물론 우리는 응용 프로그램에서 명시 적으로 POST 데이터를 기록 할 수 있지만, 나는 내 코드에서 그것에 대해 걱정하지 말자 구성 수준의 방법을 가지고 싶습니다.)

+1

관련 질문에서 기록 찾을 수 있습니다 : http://serverfault.com/questions/51295/logging- http-post-in-apache –

답변

2

나는 그것을 할 것 실제로 응용 프로그램. 물론 로거 시스템에 따라 런타임에 구성 가능합니다. 예를 들어 Apache Log (log4j/cxx)를 사용하는 경우 이러한 URL에 대한 전용 로거를 구성한 다음 XML 파일에서 런타임에 구성 할 수 있습니다.

+0

내 관심사는 모든 api 처리기가 처음에 데이터를 기록해야한다는 것입니다. 추가하는 동안 잊어 버리기 쉽고 기껏해야 상용구가 추가 된 것입니다. –

+0

좋은 프레임 워크는 전후 필터, 또는 화재 나 잊을 수있는 미들웨어와 동등한 것이어야합니다. – blockhead

6

정확하게 대답은 아니지만 Apache 자체에서이 작업을 수행하는 방법을 들어 본 적이 없습니다. 확장 모듈을 사용하는 것이 가능할 수도 있지만, 필자가 작성되었는지는 알 수 없습니다.

걱정할 점 중 하나는 POST 데이터가 꽤 클 수 있으며 기록되는 양에 제한을 두지 않으면 잠시 디스크 공간이 부족할 수 있다는 것입니다. 해커가 서버를 망칠 가능성이있는 경로입니다.

+2

나는 완전히 후반에 동의한다! POST 데이터에는 제한이 없기 때문에 로그에 저장하고 싶지 않은 모든 종류의 데이터 (예 : 암호 포함)가 포함될 수 있습니다. 로그에 원하지 않는 다른 보안되고 큰 데이터가있을 수 있습니다. –

+2

로깅 비밀번호는 문제가되지 않습니다. 어쨌든 일반 텍스트로 비밀번호를 전송하지 않습니다. 그렇습니까? – supo

+7

@supo : 암호가 SSL을 통해 암호화 된 경우에도 여전히 일반 텍스트로 기록됩니다. 그러나 내가 다루었던 특별한 관심사는 로그에 암호를 노출하지 않고 디스크 공간을 채우는 것이 었습니다. –

38

Apache의 mod_dumpio을 사용하십시오. 명백한 이유 때문에주의하십시오.

mod_dumpio stops logging binary payloads at the first null character에 유의하십시오. 예를 들어, multipart/form-data gzip 파일을 업로드하면 mod_dumpio로 처음 몇 바이트 만 표시됩니다.

/modules 폴더에도 아파치가 httpd.conf에이 모듈을 언급하지 않을 수도 있습니다. 그냥 수동으로 추가 LoadModule 잘 작동합니다.

+1

일반적인 아파치 기능 : 전체 문서 읽기, 모든 설정 및 효과 없음. 그건 쓰레기 야. – peterh

12

답변이 늦었음에도 불구하고. 이 모듈은 다음을 할 수 있습니다 : https://github.com/danghvu/mod_dumpost

+1

멋지다! 로그 파일 분석을 위해 즉 SQL 주입 시도와 같은 것들에 대한 포스트 데이터를 덤프하는 것이 절대적으로 의미가 있습니다. – KIC

0

더 쉬운 옵션은 서버에 도착하기 전에 POST 데이터를 기록하는 것입니다. 웹 응용 프로그램의 경우 Burp Proxy을 사용하고 Firefox를 HTTP/S 프록시로 사용하도록 설정하면 실시간으로 '유선에서'데이터를 볼 수 있습니다.

브라우저없이 API 요청을하기 때문에 SoapUI는 매우 유용하며 유사한 정보를 표시 할 수 있습니다. 아마도 당신이 Burp를 통해 연결하도록 SoapUI를 구성 할 수있을 것입니다.

4

당신은 mod_security를 설치하고 /etc/modsecurity/modsecurity.conf에 넣을 수 있습니다 : 당신은 POST 데이터를 볼 수 ModSecurity을 사용할 수 있습니다

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

modsecurity는 우분투 패키지를 가지고 있지만 다른 것들은 그렇지 않습니다. –

1

.

데비안/우분투에 설치합니다

$ sudo apt install libapache2-mod-security2 

권장 구성 파일을 사용하여

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

을 그리고

SecRuleEngine On 
SecAuditEngine On 
다음 줄

SecRuleEngine DetectionOnly 
SecAuditEngine RelevantOnly 

을 편집

다시로드 아파치 :

$ sudo service apache2 reload 

이제 귀하의 데이터에 Serverfault에 /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"}