2009-06-13 133 views
50

想象一下,您有一個站點API,它以具有參數的GET請求或POST請求(例如,使用標準的url編碼,&分隔的POST數據)的形式接受數據。如果你想記錄和分析API調用,那麼GET請求將很容易,因爲它們將在apache日誌中。有沒有簡單的方法來獲取POST日誌中的數據?在Apache中記錄POST數據的最佳方式是什麼?

(當然,我們可以在應用程序日誌明確POST數據,但我想有一個配置級別的方式,讓我的代碼不擔心。)

+1

相關問題記錄在ServerFault數據:http://serverfault.com/questions/51295/logging- http-post-in-apache – 2015-09-24 13:50:59

回答

2

我會做的實際上,應用程序。它仍然可以在運行時配置,當然取決於您的記錄器系統。例如,如果使用Apache Log(log4j/cxx),則可以爲此類URL配置專用記錄器,然後在運行時從XML文件配置它。

+0

我擔心的是,每個api處理程序都必須在開始時記錄數據 - 在添加時很容易忘記,最多隻能添加樣板文件。 – 2009-06-13 04:33:11

+0

任何好的框架都應該有前置和後置過濾器,或者相當於中間件的東西,它可以讓你開火併忘記。 – blockhead 2012-10-15 07:57:40

6

不完全是一個答案,但我從來沒有聽說過在Apache本身做到這一點的方法。我想這可能是一個擴展模塊,但我不知道是否寫過。

一個問題是POST數據可能非常大,如果您對記錄的數據量沒有限制,則可能會在一段時間後用完磁盤空間。這是黑客混淆你服務器的可能途徑。

+2

我完全同意後半部分!由於POST數據沒有限制,它可能包含您不想存儲在日誌中的各種數據,包括密碼。在日誌中可能還有其他安全和大型數據。 – 2009-06-13 05:23:19

+2

記錄密碼不是問題,您不是以純文本形式發送密碼,是嗎? – supo 2011-03-21 15:45:05

+7

@supo:即使密碼是通過SSL加密的,他們仍然會以純文本格式登錄。但是我正在處理的特殊問題是填滿磁盤空間,而不是在日誌中顯示密碼。 – 2011-03-21 16:17:12

38

使用Apache的mod_dumpio。小心明顯的原因。

請注意,mod_dumpio stops logging binary payloads at the first null character。例如,上傳一個gzip'd文件的multipart/form-data可能只會顯示mod_dumpio的前幾個字節。

另請注意,即使在/modules文件夾中,Apache也可能不會在httpd.conf中提及此模塊。只需手動添加LoadModule就可以正常工作。

0

一個更簡單的選項可能是在POST數據到達服務器之前記錄它。對於Web應用程序,我使用Burp Proxy並將Firefox設置爲HTTP/S代理,然後我可以實時觀看(並修改)線路上的數據。

對於不使用瀏覽器的API請求,SoapUI非常有用,可能會顯示類似的信息。我敢打賭,你可能可以配置SoapUI來通過Burp連接(只是猜測)。

4

您可以安裝mod_security,放在/etc/modsecurity/modsecurity.conf

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

您可以使用ModSecurity查看POST數據。

安裝在Debian/Ubuntu的:

$ sudo apt install libapache2-mod-security2 

使用推薦的配置文件:

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

,並編輯以下行

SecRuleEngine DetectionOnly 
SecAuditEngine RelevantOnly 

SecRuleEngine On 
SecAuditEngine On 

刷新阿帕奇:

$ sudo service apache2 reload 

您將立即開始尋找下/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"} 
相關問題