在Apache中记录POST数据的最佳方式是什么?

问题描述:

想象一下,您有一个站点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

我会做的实际上,应用程序。它仍然可以在运行时配置,当然取决于您的记录器系统。例如,如果使用Apache Log(log4j/cxx),则可以为此类URL配置专用记录器,然后在运行时从XML文件配置它。

+0

我担心的是,每个api处理程序都必须在开始时记录数据 - 在添加时很容易忘记,最多只能添加样板文件。 – 2009-06-13 04:33:11

+0

任何好的框架都应该有前置和后置过滤器,或者相当于中间件的东西,它可以让你开火并忘记。 – blockhead 2012-10-15 07:57:40

不完全是一个答案,但我从来没有听说过在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

使用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就可以正常工作。

虽然回答迟到。该模块可以:https://github.com/danghvu/mod_dumpost

一个更简单的选项可能是在POST数据到达服务器之前记录它。对于Web应用程序,我使用Burp Proxy并将Firefox设置为HTTP/S代理,然后我可以实时观看(并修改)线路上的数据。

对于不使用浏览器的API请求,SoapUI非常有用,可能会显示类似的信息。我敢打赌,你可能可以配置SoapUI来通过Burp连接(只是猜测)。

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

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

您可以使用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"}