Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 在Apache中记录POST数据的最佳方法?_Logging_Apache_Apache Config - Fatal编程技术网

Logging 在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

假设您有一个站点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_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