Одно решение, которое мы можем применить: это решение только для 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"