Маскировать пароли с помощью Logback?

в настоящее время мы обычно регистрируем все XML-документы, входящие и выходящие из нашей системы, и некоторые из них содержат пароли в чистом виде. Мы хотели бы иметь возможность настроить Logback logger/appender, который делает это, чтобы сделать некоторое соответствие шаблону или подобное, и если он обнаруживает, что пароль присутствует, чтобы заменить его (со звездочками, скорее всего). Обратите внимание, что мы не хотим отфильтровывать запись журнала, мы хотим замаскировать ее часть. Я был бы признателен за совет о том, как это будет сделано с Logback так. Спасибо.

2 ответов


версия logback 0.9.27 введена замена возможности. Замены поддерживают регулярные выражения. Например, если зарегистрированное сообщение было "userid=alice, pswd= 'my secret'", а шаблон вывода был

  "%d [%t] $logger - %msg%n",

вы просто измените шаблон

 "%d [%t] $logger - %replace(%msg){"pswd='.*'", "pswd='xxx'"}%n"

обратите внимание, что выше использует цитирую.

предыдущее сообщение журнала будет выведено как "userid=alice, pswd= 'xxx'"

для кроме того, можно пометить оператор журнала как конфиденциальный и указать %replace выполнять замену только для операторов журнала, помеченных как конфиденциальные. Пример,

 Marker confidential = MarkerFactory.getMarker("CONFIDENTIAL");
 logger.info(confidential, "userid={}, password='{}'", userid, password);

к сожалению, текущая версия logback еще не поддерживает условные замены (на основе маркеров или иным образом). Однако вы можете легко написать свой собственный код замены, расширив ReplacingCompositeConverter. Shout on the logback-список рассылки пользователя, если вам нужно дальше помощь.


Я считаю, что маскировка-это аспект вашего бизнеса, а не аспект какой-либо технологии или системы регистрации. Бывают ситуации, когда пароли, национальные идентификаторы и т. д. должны маскироваться при хранении их в БД, а также по юридическим причинам. Вы должны иметь возможность маскировать xml, прежде чем давать его регистратору.

один из способов сделать это-запустить XML через XSLT, который делает это, а затем дать его logger для ведения журнала.

Если вы не хотите этого делать тогда LogBack имеет поддержка фильтров это один из вариантов (не самый правильный, хотя).

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