在Apache中记录POST数据的最佳方式是什么?
想象一下,您有一个站点API,它以具有参数的GET请求或POST请求(例如,使用标准的url编码,&分隔的POST数据)的形式接受数据。如果你想记录和分析API调用,那么GET请求将很容易,因为它们将在apache日志中。有没有简单的方法来获取POST日志中的数据?在Apache中记录POST数据的最佳方式是什么?
(当然,我们可以在应用程序日志明确POST数据,但我想有一个配置级别的方式,让我的代码不担心。)
我会做的实际上,应用程序。它仍然可以在运行时配置,当然取决于您的记录器系统。例如,如果使用Apache Log(log4j/cxx),则可以为此类URL配置专用记录器,然后在运行时从XML文件配置它。
我担心的是,每个api处理程序都必须在开始时记录数据 - 在添加时很容易忘记,最多只能添加样板文件。 – 2009-06-13 04:33:11
任何好的框架都应该有前置和后置过滤器,或者相当于中间件的东西,它可以让你开火并忘记。 – blockhead 2012-10-15 07:57:40
不完全是一个答案,但我从来没有听说过在Apache本身做到这一点的方法。我想这可能是一个扩展模块,但我不知道是否写过。
一个问题是POST数据可能非常大,如果您对记录的数据量没有限制,则可能会在一段时间后用完磁盘空间。这是黑客混淆你服务器的可能途径。
我完全同意后半部分!由于POST数据没有限制,它可能包含您不想存储在日志中的各种数据,包括密码。在日志中可能还有其他安全和大型数据。 – 2009-06-13 05:23:19
记录密码不是问题,您不是以纯文本形式发送密码,是吗? – supo 2011-03-21 15:45:05
@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
就可以正常工作。
一个更简单的选项可能是在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"}
相关问题记录在ServerFault数据:http://serverfault.com/questions/51295/logging- http-post-in-apache – 2015-09-24 13:50:59