正则表达式 – 是否可以在apache访问日志中排除指定的GET参数?
发布时间:2020-12-14 02:29:52 所属栏目:百科 来源:网络整理
导读:我需要在我的apache日志中排除一些敏感的细节,但我想保留日志和uri的内容.是否可以在我的访问日志中实现以下内容: 127.0.0.1 - - [27/Feb/2012:13:18:12 +0100] "GET /api.php?param=secret HTTP/1.1" 200 7600 "http://localhost/api.php" "Mozilla/5.0 (M
我需要在我的apache日志中排除一些敏感的细节,但我想保留日志和uri的内容.是否可以在我的访问日志中实现以下内容:
127.0.0.1 - - [27/Feb/2012:13:18:12 +0100] "GET /api.php?param=secret HTTP/1.1" 200 7600 "http://localhost/api.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML,like Gecko) Chrome/17.0.963.56 Safari/535.11" 我想用“[FILTERED]”替换“秘密”,如下所示: 127.0.0.1 - - [27/Feb/2012:13:18:12 +0100] "GET /api.php?param=[FILTERED] HTTP/1.1" 200 7600 "http://localhost/api.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML,like Gecko) Chrome/17.0.963.56 Safari/535.11" 我知道我可能应该使用POST发送此变量,但损坏已经完成.我看过http://httpd.apache.org/docs/2.4/logs.html和LogFormat,但找不到使用正则表达式或类似的任何可能性.有什么建议? [编辑] 如果您有可能选择,请不要将敏感变量作为GET参数发送.
我找到了解决问题的方法之一.如果我将日志输出传递给sed,我可以在将其附加到日志文件之前对输出执行正则表达式替换.
例1 CustomLog "|/bin/sed -E s/'param=[^& tn]*'/'param=[FILTERED]'/g >> /your/path/access.log" combined 例2 也可以排除几个参数: exclude.sh #!/bin/bash while read x ; do result=$x for ARG in "$@" do cleanArg=`echo $ARG | sed -E 's|([^0-9a-zA-Z_])|\1|g'` result=`echo $result | sed -E s/$cleanArg'=[^& tn]*'/$cleanArg'=[FILTERED]'/g` done echo $result done 将上面的脚本移到文件夹/ opt / scripts /或其他地方,给脚本执行权限(chmod x exclude.sh)并修改你的apache配置,如下所示: CustomLog "|/opt/scripts/exclude.sh param param1 param2 >> /your/path/access.log" combined 文档 http://httpd.apache.org/docs/2.4/logs.html#piped http://www.gnu.org/software/sed/manual/sed.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |