想象一下,您有一个站点API,它接受带有参数的GET请求形式的数据,或者作为POST请求(例如,使用标准的url编码和&分离的POST数据).如果要记录和分析API调用,GET请求将很容易,因为它们将位于apache日志中.是否有一种简单的方法来获取apache日志中的POST数据?
(当然我们可以在应用程序中显式记录POST数据,但我希望有一种配置级方式,让我不用担心它在代码中.)
使用Apache的mod_dumpio.出于明显的原因要小心.
请注意,mod_dumpio会停止在第一个空字符处记录二进制有效负载.例如,multipart/form-data
上传一个gzip文件可能只显示mod_dumpio的前几个字节.
另请注意,httpd.conf
即使/modules
文件夹中存在此模块,Apache也可能不提及此模块.只需手动添加即可LoadModule
.
虽然现在回答很晚.该模块可以:https://github.com/danghvu/mod_dumpost
你可以安装mod_security
和放入/etc/modsecurity/modsecurity.conf
:
SecRuleEngine On SecAuditEngine On SecAuditLog /var/log/apache2/modsec_audit.log SecRequestBodyAccess on SecAuditLogParts ABIJDFHZ
不完全是答案,但我从来没有听说过如何在Apache本身做到这一点.我想这可能是一个扩展模块,但我不知道是否已经编写了一个.
一个问题是POST数据可能非常大,如果您没有对记录的数量进行某种限制,一段时间后可能会耗尽磁盘空间.黑客可能会弄乱你的服务器.
您可以使用它[ModSecurity][1]
来查看POST数据.
在Debian/Ubuntu上安装:
$ sudo apt install libapache2-mod-security2
使用推荐的配置文件:
$ sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
重新加载Apache:
$ 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"}