Dot-Net

從 ASP.NET Core 日誌記錄中刪除敏感資訊

  • November 13, 2021

我正在為我的應用程序使用 ASP.NET Core 日誌記錄抽象。

我有一個敏感字元串列表,我想確保在發送到任何接收器時在日誌中將其屏蔽為“*****”。(我正在使用 serilog - 但也許它甚至可以在 serilog 之前插入)。

在發送到任何接收器/寫入器等之前,我如何將其插入 ASP.NET Core 日誌記錄系統以用“*******”替換所有這些敏感字元串。

在不知道您要擦洗什麼的情況下,有幾種選擇。

這個 GitHub issue中有幾個好主意。

總結執行緒:您可以使用豐富器來完全擦除屬性的內容。您還可以使用文本格式化程序手動執行正則表達式替換。

還提到了一些包,您可以添加它們以提供更多關於處理日誌的結構:

我遇到了類似的問題,我需要在記錄期間從對像中編輯/隱藏某些欄位。

為簡潔起見,我們假設對像是

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 理想情況下,我們不應該記錄任何敏感的東西,但有時我們需要記錄整個對象,其中某些道具不希望被記錄,以上是處理這種情況的集中方法,而不是審查程式碼中的每個送出來驗證這個潛在的錯誤。

引用自:https://stackoverflow.com/questions/48753594