Nginx map \ x22password \ x22, чтобы скрыть ведение журнала POST - PullRequest
0 голосов
/ 01 февраля 2020

Мой журнал настроен на запись $request_body в системный журнал, но он включает в себя конфиденциальные данные в журналах.

Например, пароль регистрируется в журналах как \x22password\x22, когда пользователь входит в систему. В настоящее время я хочу сохранить окружающие данные и скрыть только пароль.

Например, когда пользователь входит в систему и выполняет POST-запрос к бэкэнду аутентификации, он регистрируется как

body: "{\x22username\x22:\x22myname@mydomain.com\x22,\x22password\x22:\x22One2Three4!?\x22}"

, но я хочу, чтобы он был зарегистрирован вместо

body: "{\x22username\x22:\x22myname@mydomain.com\x22,\x22password\x22:\x22********\x22}"

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

Я посмотрел здесь NGINX: запутать пароль в access_log , но на вопрос не ответили. Надеемся получить руководство по регулярным выражениям, независимо от передового опыта и проблем безопасности.

Как я могу скрыть пароль в журнале с этим форматом тела ответа?

1 Ответ

1 голос
/ 01 февраля 2020

Давайте сначала попробуем отладку. Вот регулярное выражение, которое должно работать, но я не уверен, как оно будет себя вести, если пароль содержит \x22} или \x22, подстрок. Можете ли вы проверить это?

map $request_body $obfuscated_request_body {
    "~(.*[{,]\\x22password\\x22:\\x22).*?(\\x22[,}].*)" $1********$2;
    default $request_body;
}

Замените $request_body на $obfuscated_request_body в параметрах директивы log_format. Обратите внимание, что блок map должен быть размещен вне блока server.

Обновление 1

Кажется, что \x22 подстрока будет отображаться как \x5C\x5Cx22 в файле журнала, поэтому регулярное выражение должно работать в любых условиях.

...