Программа Piped Log неожиданно завершилась неудачей при использовании sed с Apache в Windows. - PullRequest
0 голосов
/ 02 ноября 2018

Я использую sed для маскировки некоторых данных в логах прокси-сервера Apache в windows.

Помещение команды в файл 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 голосов
/ 13 ноября 2018

Одно решение, которое мы можем применить: это решение только для Apache

мы можем удалить параметры только из тех запросов, которые содержат конфиденциальные данные, такие как пароль. Хотя такой тип запроса должен быть POST, но так как он используется, мы можем сделать его запись как POST в файлах журнала apache и скрыть конфиденциальные данные.

Этого можно достичь только с помощью конфигурации 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...