在Apache中记录POST数据的最佳方法?

Kev*_*eil 56 apache logging apache-config

想象一下,您有一个站点API,它接受带有参数的GET请求形式的数据,或者作为POST请求(例如,使用标准的url编码和&分离的POST数据).如果要记录和分析API调用,GET请求将很容易,因为它们将位于apache日志中.是否有一种简单的方法来获取apache日志中的POST数据?

(当然我们可以在应用程序中显式记录POST数据,但我希望有一种配置级方式,让我不用担心它在代码中.)

小智 38

使用Apache的mod_dumpio.出于明显的原因要小心.

请注意,mod_dumpio会停止在第一个空字符处记录二进制有效负载.例如,multipart/form-data上传一个gzip文件可能只显示mod_dumpio的前几个字节.

另请注意,httpd.conf即使/modules文件夹中存在此模块,Apache也可能不提及此模块.只需手动添加即可LoadModule.

  • 典型的apache功能:整个doc读取,一切设置,没有效果.这是一个废话. (4认同)

w00*_*00d 13

虽然现在回答很晚.该模块可以:https://github.com/danghvu/mod_dumpost


Jer*_*ost 11

你可以安装mod_security和放入/etc/modsecurity/modsecurity.conf:

SecRuleEngine On
SecAuditEngine On
SecAuditLog /var/log/apache2/modsec_audit.log
SecRequestBodyAccess on
SecAuditLogParts ABIJDFHZ
Run Code Online (Sandbox Code Playgroud)

  • 对于`http 2.4` yum 包是`mod24_security`,配置文件位置是`/etc/httpd/conf.d/mod_security.conf` (3认同)
  • modsecurity有Ubuntu软件包,而其他软件包没有. (2认同)
  • 还有什么?喜欢杜皮奥吗?它已经包含在 Apache HTTPD 中——至少在 Ubuntu 16.04 中是这样。这就是为什么没有单独的包。您只需要启用它即可。 (2认同)

Dav*_*d Z 7

不完全是答案,但我从来没有听说过如何在Apache本身做到这一点.我想这可能是一个扩展模块,但我不知道是否已经编写了一个.

一个问题是POST数据可能非常大,如果您没有对记录的数量进行某种限制,一段时间后可能会耗尽磁盘空间.黑客可能会弄乱你的服务器.

  • @supo:即使密码是通过SSL加密的,它们仍然会以纯文本格式记录.但我正在解决的特别问题是填满你的磁盘空间,而不是在日志中暴露密码. (8认同)
  • 我完全同意后半部分!由于POST数据没有限制,因此可能包含您不希望存储在日志中的各种数据,包括密码.您可能在日志中不需要其他安全和大型数据. (4认同)
  • 记录密码不是问题,你不是用纯文本发送密码,不是吗? (2认同)

hg8*_*hg8 7

您可以使用它[ModSecurity][1]来查看POST数据.

在Debian/Ubuntu上安装:

$ sudo apt install libapache2-mod-security2
Run Code Online (Sandbox Code Playgroud)

使用推荐的配置文件:

$ sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Run Code Online (Sandbox Code Playgroud)

重新加载Apache:

$ sudo service apache2 reload
Run Code Online (Sandbox Code Playgroud)

您现在将在下面找到您的数据 /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"}
Run Code Online (Sandbox Code Playgroud)


Ass*_*vie 2

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