Удаление конфиденциальной информации из журналов в журнале ASP.NET Core

Я использую абстракцию журналирования ASP.NET Core для своего приложения.

У меня есть список чувствительных строк, которые я хотел бы удостовериться, что в журналах есть маска "*****" при отправке в любые приемники. (Я использую Serilog - но, возможно, его можно подключить еще до Serilog).

Как бы я включил это в систему ведения журнала ASP.NET Core, чтобы заменить все эти чувствительные строки на "*******" перед отправкой в ​​любые приемники / записи и т. Д.

2 ответа

Решение

Не зная, что вы пытаетесь вычистить, есть несколько вариантов.

В этом выпуске GitHub есть несколько хороших идей.

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

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

У меня была аналогичная проблема, когда мне нужно было отредактировать/скрыть определенные поля объекта во время ведения журнала.

Для краткости предположим, что объект

      public class User
{
   public string UserName { get; set; }
   public string Password { get; set; }
   public override string ToString()
   {  
       return base.ToString();
   }
}

Теперь мы логируем с помощью serilog, используя оператор деструктуризации объекта(@)

      User user = new User() { UserName = "u", Password = "p" };
_logger.LogWarning("value is {@val}", user);

Чтобы скрыть реквизит пароля, мы можем настроить serilog, как показано ниже.

      Log.Logger = new LoggerConfiguration()
                        .WriteTo.Console(new Serilog.Formatting.Json.JsonFormatter())
                        .Destructure.ByTransforming<User>(_ => new { User = _.UserName })
                        .CreateLogger();

Теперь для любой регистрации объекта у пользователя не будет поля «Пароль», или вы можете отредактировать поле «Пароль», установив «Пароль = "######"

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

Другие вопросы по тегам