假设您有一个站点 API,它接受带有参数的 GET 请求形式的数据,或者接受 POST 请求形式的数据(比如,使用标准的 url 编码的 &-分隔的 POST 数据)。如果您想要记录和分析 API 调用,GET 请求将很容易,因为它们将在 apache 日志中。有没有一种简单的方法来获取 apache 日志中的 POST 数据?
(当然,我们可以在应用程序中显式地记录 POST 数据,但是我希望有一种配置级别的方式,让我不必在代码中担心这个问题。)
实际上,我会在申请表上写。当然,它在运行时仍然是可配置的,这取决于您的日志系统。例如,如果您使用 Apache 日志(log4j/cxx) ,您可以为这样的 URL 配置一个专用的日志记录器,然后在运行时从一个 XML 文件进行配置。
这不是一个确切的答案,但是我从来没有听说过在 Apache 中有这样的方法。我想这可能与一个扩展模块,但我不知道是否已经编写了一个。
一个问题是 POST 数据可能非常大,如果不对日志记录的数量进行某种限制,过一段时间后可能会耗尽磁盘空间。这可能是黑客破坏服务器的一条途径。
使用 Apache 的 翻译: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳。出于显而易见的原因要小心。
请注意,mod _ Dumpio 在第一个空字符处停止记录二进制有效负载。例如,gzip 文件的 multipart/form-data上传可能只显示 mod _ dump 的前几个字节。
multipart/form-data
还要注意,Apache 可能不会在 httpd.conf中提到这个模块,即使它出现在 /modules文件夹中。只要手动添加 LoadModule就可以了。
httpd.conf
/modules
LoadModule
虽然现在回答已经晚了。这个模块可以做: https://github.com/danghvu/mod_dumpost
一个更简单的选择可能是在 POST 数据到达服务器之前对其进行日志记录。对于 web 应用程序,我使用 打嗝代理并设置 Firefox 作为 HTTP/S 代理使用它,然后我就可以实时观察(并破坏)线上的数据。
对于在没有浏览器的情况下发出 API 请求,SoapUI 非常有用,可能会显示类似的信息。我敢打赌,您也可以将 SoapUI 配置为通过 Burp 进行连接(尽管只是猜测)。
你可以安装 mod_security并输入 /etc/modsecurity/modsecurity.conf:
mod_security
/etc/modsecurity/modsecurity.conf
SecRuleEngine On SecAuditEngine On SecAuditLog /var/log/apache2/modsec_audit.log SecRequestBodyAccess on SecAuditLogParts ABIJDFHZ
可以使用 [ModSecurity][1]查看 POST 数据。
[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下记录的数据
/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"}
您还可以使用内置的法医日志特性。
您还可以使用 mod DumplO,激活它,并从 Apache 日志 Conf 中加载。将日志名称定义为 postdata 名称,并加载到 AccessLog 语句
# AccessLog/path/to/your/log/abc.acc.log 组合
AccessLog/path/to/your/log/abc.acc.log postdata
启用 mod _ dump
基于 Debian 的操作系统
Sudo a2enmod dump _ io
基于 RedHat 的操作系统
无需做任何事情,它是默认启用的
将 mod _ dump 添加到虚拟主机配置中
<VirtualHost *:8080> ServerName localhost ErrorLog "/var/log/httpd/error.log" CustomLog "/var/log/httpd/access.log" combined DumpIOInput On DumpIOOutput On LogLevel dumpio:trace7 </VirtualHost>
重启阿帕奇