【问题标题】:Piped log program failed unexpectedly when using sed with Apache at windows在 Windows 上将 sed 与 Apache 一起使用时,管道日志程序意外失败
【发布时间】:2018-11-02 11:47:58
【问题描述】:

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

【问题讨论】:

    标签: apache logging sed proxy


    【解决方案1】:

    我们可以应用的一个解决方案:这是 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2017-06-06
      • 1970-01-01
      • 2012-03-30
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多