Logging 在Apache中记录POST数据的最佳方法?
假设您有一个站点API,它接受带有参数的GET请求形式的数据,或者接受POST请求形式的数据(例如,使用标准url编码和分隔的POST数据)。如果您想记录和分析API调用,GET请求将很容易,因为它们将在apache日志中。有没有一种简单的方法可以在apache日志中获取POST数据Logging 在Apache中记录POST数据的最佳方法?,logging,apache,apache-config,Logging,Apache,Apache Config,假设您有一个站点API,它接受带有参数的GET请求形式的数据,或者接受POST请求形式的数据(例如,使用标准url编码和分隔的POST数据)。如果您想记录和分析API调用,GET请求将很容易,因为它们将在apache日志中。有没有一种简单的方法可以在apache日志中获取POST数据 (当然,我们可以在应用程序中显式记录POST数据,但我希望有一种配置级别的方式,让我不必在代码中担心它。)实际上,我会在应用程序中这样做。当然,它在运行时仍然是可配置的,这取决于您的记录器系统。例如,如果您使用Ap
(当然,我们可以在应用程序中显式记录POST数据,但我希望有一种配置级别的方式,让我不必在代码中担心它。)实际上,我会在应用程序中这样做。当然,它在运行时仍然是可配置的,这取决于您的记录器系统。例如,如果您使用Apache日志(log4j/cxx),您可以为这些URL配置一个专用的记录器,然后在运行时从XML文件中进行配置。这不完全是一个答案,但我从来没有听说过在Apache中这样做的方法。我想可能有一个扩展模块,但我不知道是否已经编写了一个 一个问题是POST数据可能非常大,如果您不对记录的数据量进行某种限制,可能会在一段时间后耗尽磁盘空间。这是黑客破坏服务器的可能途径。使用Apache的。出于显而易见的原因,要小心 注意mod_dumpio。例如,一个gzip文件的
multipart/form data
上传可能只显示mod_dumpio的前几个字节
还要注意,Apache可能不会在
httpd.conf
中提到这个模块,即使它存在于/modules
文件夹中。只需手动添加LoadModule
就可以了。尽管回答的时间已经晚了。此模块可以执行以下操作:一个更简单的选项可能是在POST数据到达服务器之前记录它。对于web应用程序,我使用Firefox并将其设置为HTTP/S代理,然后我就可以实时地“在线”查看(和篡改)数据
对于在没有浏览器的情况下进行API请求,SoapUI非常有用,可能会显示类似的信息。我敢打赌,您可能也可以将SoapUI配置为通过Burp连接(不过只是猜测)。您可以安装
mod\u security
并放入/etc/modsecurity/modsecurity.conf
:
SecRuleEngine On
SecAuditEngine On
SecAuditLog /var/log/apache2/modsec_audit.log
SecRequestBodyAccess on
SecAuditLogParts ABIJDFHZ
您可以使用
[ModSecurity][1]
查看帖子数据
在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"}
您还可以使用内置的取证日志功能。我担心的是,每个api处理程序都必须在开始时记录数据——在添加时很容易忘记,充其量只是添加了样板文件。任何好的框架都应该有前置和后置过滤器,或者中间件的等价物,它可以让你发射并忘记。我完全同意后半部分!因为POST数据没有限制,所以它可以包括各种各样的数据,包括您不希望存储在日志中的密码。日志中可能还有其他您不需要的安全和大型数据。记录密码不是问题,您不会以纯文本形式发送密码,是吗?@supo:即使密码通过SSL加密,也会以纯文本形式记录。但我要解决的特别问题是填满你的磁盘空间,而不是在日志中公开密码。@supo wordpress不是以普通格式发送密码吗?那怎么加密呢?使用javascript加密?酷!转储日志文件分析的post数据是绝对有意义的,例如sql注入尝试。ServerFault的相关问题:modsecurity有Ubuntu软件包,而其他软件包没有。其他什么?像dumpio?它已经包含在ApacheHTTPD中——至少在Ubuntu 16.04中。这就是为什么没有单独的包装。您只需要启用它。对于
HTTP2.4
yum包是mod24_security
,配置文件位置是/etc/httpd/conf.d/mod_security.conf
,我看不到任何要求mod_log_记录POST数据的命令。我错过什么了吗?指示此模块的粒度只能与虚拟主机日志不记录内容一样Mod_dumpio听起来不像可以限制在特定位置上下文中,它是唯一的服务器-wide@JosipRodin应该可以通过日志级别(也可以在vhost或dir上下文中设置)。此外,mod_dumpio需要配置为日志级别trace7