Можно ли исключить указанные параметры GET в журналах доступа Apache? - PullRequest
6 голосов
/ 27 февраля 2012

Мне нужно исключить некоторые важные детали в моем журнале 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"

Я хочу заменить «секрет» на «[ФИЛЬТРИРОВАНОЕ]» следующим образом:

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, но не смог найти никаких возможностей использовать регулярное выражение или подобное. Есть предложения?

1011 ** [править] ** 1013

НЕ отправляйте конфиденциальные переменные в качестве параметров GET, если у вас есть возможность выбора.

1 Ответ

12 голосов
/ 28 февраля 2012

Я нашел один способ решить проблему. Если я перенаправлю вывод журнала в sed, я смогу выполнить замену регулярного выражения в выводе, прежде чем добавить его в файл журнала.

Пример 1

CustomLog "|/bin/sed -E s/'param=[^& \t\n]*'/'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'=[^& \t\n]*'/$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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...