Маскировать пароли при выходе из системы? - PullRequest
6 голосов
/ 05 января 2011

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

Ответы [ 2 ]

18 голосов
/ 07 января 2011

В версии 0.9.27 logback введена возможность замены .Замены поддерживают регулярные выражения.Например, если зарегистрированное сообщение было «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.Если вам нужна дополнительная помощь, выкрикните в список рассылки logback-пользователей.

1 голос
/ 06 января 2011

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

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

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

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

...