我正在使用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
答案 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"