Скрытие конфиденциальной информации в файлах журналов

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

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

Существует ли парадигма дизайна, которая может быть использована для "маркировки" определенных битов информации как чувствительных, так что общий конвейер протоколирования может отфильтровывать их?

Ответ 1

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

Разумеется, для этого последовательно применяются хорошие методы кодирования. Обычно я выбираю журнал всех объектов, используя их перегрузки toString (в Java или .NET), который сериализует хэш значений для полей, отмеченных атрибутом Sensitive, примененным к ним.

Конечно, строки SQL более проблематичны, но мы больше полагаемся на наш ORM для сохранения данных и регистрируем состояние системы на разных этапах, а затем записываем SQL-запросы, тем самым она становится не-проблемой.

Ответ 2

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

Ответ 3

Регистрация номера кредитной карты может быть нарушением PCI. И если вы не совместимы с PCI, вам платят более высокие комиссионные за обработку карт. Либо не регистрируйте конфиденциальную информацию, либо зашифруйте все файлы журнала.

Ваша идея "маркировки" чувствительной информации интригует. У вас может быть специальный тип данных для Sensitive информации, которая завершает реальный базовый тип данных. Всякий раз, когда этот объект отображается как символьная строка, он просто возвращает "***" или что-то еще.

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

Ответ 4

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

Если, скажем, вы регистрировали что-то еще, например, логин, вы можете явно заменить пароль на *****.

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

Ответ 5

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

Ответ 6

Что касается специфических операторов SQL, если ваш язык поддерживает его, вы должны использовать параметры вместо того, чтобы вводить значения в самом выражении. Другими словами:

select * from customers where credit_card = ?

Затем установите параметр на номер кредитной карты.

Конечно, если вы планируете записывать операторы SQL с заполненными параметрами, вам понадобится другой способ фильтрации конфиденциальных данных.

Ответ 7

Обратитесь к этому инструменту, созданному именно для этого прецедента.

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

https://github.com/senthilaru/sp-util

<dependency>
    <groupId>com.immibytes</groupId>
    <artifactId>sp-utils</artifactId>
    <version>1.0.0-RELEASE</version>
</dependency>