2010-05-12 310 views
3

我有一個包含敏感信息(信用卡信息,電話號碼等)的類。爲敏感數據定製log4j日誌記錄

我希望能夠將此類傳遞給log4j,但讓它隱藏某些信息。

如果我有一個具有getPhoneNumber,getCreditCardNumber方法的UserInformation類,我將如何自定義log4j或這個類,以便它將正確掩蓋數字。

我想要將信用卡號輸出爲xxxx-xxxx-xxxx-1234,並將電話號碼輸出爲xxxx-xxx-xxx,因爲它們是1234-1234-1234-1234和1234-567 -890

感謝

回答

5

您可以嘗試通過編寫掩蓋這些模式的自定義日誌記錄格式來實現這一點。但我認爲這有點狡猾......因爲有人可能會意外或故意通過調整記錄器配置文件等方式來規避這種情況。

我認爲根據您的具體情況執行以下操作之一會更好一些正在裝配的日誌消息:

  • 更改您的代碼中調用記錄器上組裝UserInformation這種不起眼的敏感領域使用替代getter方法的日誌信息。
  • 更改toString方法UserInformation以遮蓋詳細信息。
+1

+1用於日誌保存'toString()'方法 – 2010-05-12 10:57:05

0

更新:最好的選擇可能是包裝您的真實對象在實現相同的接口,但回報混淆版本(通過委託給實物和混淆的結果)混淆,類名的包裝和手那些到測井系統。這隻適用於你自己實際傳入這些對象的情況,而不是如果它們是對象樹的一部分 - 這可能會使整個情況變得更加複雜。

老:

也許你應該只需添加getPhoneNumberForLogging()/ getObfuscatedPhoneNumber()類型的功能呢? (當然你必須考慮到,如果你把一個包含這個數據的對象交給另一個對象/進程,你不能控制對'正常'函數的訪問,所以在技術上你根本沒有屏蔽數據 - 儘管可能是可能的使,顯示敏感數據包本地只能訪問)

可能investigate the call stack在每次調用和揣摩,如果你想返回完整的數據或模糊版本的方法 - 這將增加相當開銷很大,調試起來可能非常棘手。

4

我會爲這些字段寫一個混淆格式化程序,並用它來寫入日誌文件。

我還問你爲什麼要繼續使用字符串原語而不是封裝適當行爲的對象。

+1

+1第二句! – 2010-05-12 11:21:19