Настройка журнала log4j для конфиденциальных данных - PullRequest
3 голосов
/ 12 мая 2010

У меня есть класс, который содержит конфиденциальную информацию (данные кредитной карты, номера телефонов и т. Д.).

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

Если у меня есть класс UserInformation, в котором есть методы getPhoneNumber, getCreditCardNumber, как мне настроить log4j или этот класс, чтобы он правильно скрывал числа.

Я хочу, чтобы номер кредитной карты выводился как xxxx-xxxx-xxxx-1234, а номер телефона выводился как xxxx-xxx-xxx, учитывая, что это будут 1234-1234-1234-1234 и 1234-567- 890

Спасибо

Ответы [ 3 ]

6 голосов
/ 12 мая 2010

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

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

  • Измените вызовы регистратора в вашем коде, чтобы собрать сообщения журнала, используя альтернативные методы получения на UserInformation, которые скрывают чувствительные поля.
  • Измените метод toString на UserInformation, чтобы скрыть детали.
5 голосов
/ 12 мая 2010

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

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

0 голосов
/ 12 мая 2010

Обновление: лучший вариант, вероятно, заключается в том, чтобы обернуть ваши реальные объекты в оболочку Obfuscated-ClassName, которая реализует тот же интерфейс, но возвращает обфусцированные версии (путем делегирования реальному объекту и обфусцирования результата) и передать их в систему регистрации. Это работает только в том случае, если вы сами передаете эти объекты, а не если они являются частью дерева объектов - это может сделать всю ситуацию немного более сложной.

старый:

Может быть, вам следует просто добавить функции типа getPhoneNumberForLogging () / getObfuscatedPhoneNumber ()? (Конечно, вы должны принять во внимание, что если вы передаете объект, содержащий эти данные, другому объекту / процессу, вы не можете контролировать доступ к «обычным» функциям, поэтому технически вы вообще не экранируете данные - хотя это может быть возможно сделать методы, которые показывают, что конфиденциальный пакет данных локально доступен только?)

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

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