在Windows上将Apache与sed一起使用时,管道日志程序意外失败

时间:2018-11-02 11:47:58

标签: apache logging sed proxy

我正在使用sed屏蔽Windows上Apache的代理日志中的某些数据。

在httpd.conf文件中放置命令是:

 CustomLog "|$'C:/Program Files (x86)/GnuWin32/bin/sed' -i 's/password=[^ ]*/password=masked/' 'logs/proxy-access.log'" combined

在启动Apache服务命令时提示开始打开和关闭,并在error.logs中发现异常,即:

AH00106: piped log program ''C:/Program Files (x86)/GnuWin32/bin/sed' -i 's/password=[^ ]*/password=masked/' 'C:/Apache24/logs/proxy-access.log'' failed unexpectedly

1 个答案:

答案 0 :(得分:0)

我们可以应用的一种解决方案:这是仅Apache解决方案

我们只能从包含敏感数据(如密码)的请求中删除参数。 尽管此类请求应为POST,但由于这些请求正在使用中,因此我们可以像在Apache日志文件中进行POST一样记录它们并隐藏敏感数据。

这可以通过仅Apache配置来实现。下面是我在本地测试过的脚本

RewriteEngine On
RewriteCond %{QUERY_STRING} password
RewriteRule ^ - [E=allowParamLogging:no]
LogFormat "%h %l %u %t \"%m %U %H\" %>s %b" custom_format_without_queryString
LogFormat "%h \"%{BALANCER_WORKER_NAME}e\" %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" custom_format_with_queryString
CustomLog 'logs/proxy-access.log' custom_format_without_queryString expr=(reqenv('allowParamLogging')=='no')
CustomLog 'logs/proxy-access.log' custom_formate_with_queryString expr=!(reqenv('allowParamLogging')=='no')

如果请求包含密码之类的关键字,我们可以使用重写规则为请求设置环境变量(即allowParamLogging)。 然后根据环境变量,我们可以选择不同格式的日志,例如custom_format_with_queryString用于记录查询参数,而custom_format_without_queryString用于隐藏查询参数。

这是请求日志的示例

其中包含密码:

::1 - - [08/Nov/2018:16:15:00 +0530] "GET /api/documents/ HTTP/1.1" 204 -

其中不包含密码:

::1 "-" - [08/Nov/2018:16:15:03 +0530] "GET /api/documents/?type=invoice HTTP/1.1" 204 - "rbose" "curl/7.61.1"