日志是發(fā)現(xiàn)錯誤和調(diào)試代碼的便捷工具。除了日志的功能方面,從 java 安全的角度來看,日志也很重要, 當發(fā)生安全漏洞時,你的日志文件是尋找所發(fā)生事件線索的第一個位置。日志的質(zhì)量至關重要。從 Java 安全的角度來看,記錄太多或太少的信息都可能是災難性的。 在本文中,將引導你通過一種實用的 Java 日志記錄方法——我們應該記錄什么,我們不應該記錄什么。
我們應該記錄什么?1、這是誰干的?識別發(fā)出此請求的用戶或系統(tǒng)。如果可能,使用用戶 ID 和 IP 地址。
2、到底是怎么回事?這是什么日志語句。許多開發(fā)人員已經(jīng)認識到不同的日志級別來注釋消息的重要性(ERROR、WARN、INFO、DEBUG、TRACE)。區(qū)分功能日志記錄、安全日志記錄,甚至審計日志記錄(如果適用)是明智的。
3、在哪發(fā)生的?確定位置。你通常為每個類定義一個記錄器,所以這已經(jīng)是一個好的開始。但是,我們也需要知道具體的方法。此外,我們想知道特定的節(jié)點,例如,如果你正在使用微服務架構。
4、它是什么時候發(fā)生的?時間是必不可少的,因此請確保記錄時間戳。請注意時區(qū)差異,更重要的是,每年更改兩次時區(qū)。我的建議是始終以 UTC 輸出,所以每個人都很清楚。
5、為什么會這樣? “為什么”通常是你需要找出的。你不能總是在一條日志中捕捉到這一點。在某些情況下,這是顯而易見的。如果是這樣,請將其作為消息的一部分。很多時候,只有看到日志之間的關系,我們才能解釋“為什么”。因此,請確保你的日志消息絕對清晰。
6、這是怎么發(fā)生的?就像“為什么”一樣,“如何”通常不能在一個陳述中被抓住。因此,消息之間的關聯(lián),尤其是在基于服務的架構中,是極其重要的。為此,你應該為每個具有出站接口的服務中的每個傳入請求創(chuàng)建一個唯一的關聯(lián) ID。獲得此 ID 后,應將其記錄在每個語句中。如果你需要將此 ID 傳輸?shù)搅硪粋€服務,你可以使用特定的 HTTP 標頭 X-Correlation-ID 來關聯(lián)并保持無狀態(tài)。
我們不應該記錄什么?
1、記錄太多信息與記錄太少一樣有害。你不希望你的日志被在生產(chǎn)中無用的信息淹沒。因此,應始終將生產(chǎn)系統(tǒng)上的日志級別設置為合適的級別,例如 WARN 或 ERROR。
2、作為開發(fā)的一部分,工程師將記錄可能包含個人數(shù)據(jù)的敏感實體,以便調(diào)試應用程序。盡管我們應該致力于防止這種情況發(fā)生,但內(nèi)部調(diào)試消息應該具有適當?shù)娜罩炯墑e——例如,DEBUG 或 TRACE——并且不應該在生產(chǎn)環(huán)境中可見。
3、作為一般規(guī)則,應用程序不應泄露任何特定于應用程序或特定于用戶的數(shù)據(jù)——攻擊者可以使用這些數(shù)據(jù)。此外,通過暴露個人信息,你很可能不符合隱私法規(guī)。即使只有內(nèi)部人員可以訪問日志,這也是單點故障。因此,我們根本不希望這些信息落入壞人之手。
4、開發(fā)時,請考慮你需要記錄的內(nèi)容。我們是否需要記錄內(nèi)部 ID、未加密密碼或某人的信用卡詳細信息?注意不要在 Java 中輸出完整的數(shù)據(jù)對象,因為輸出取決于該特定對象的 to String() 方法。
5、通過記錄個人信息以進行調(diào)試,我們規(guī)避了我們自己的許多安全策略——不完全記錄這些類型的信息是明智的。如果我們需要記錄特定數(shù)據(jù),請確保設置正確的日志級別,例如 DEBUG。你還應該將生產(chǎn)系統(tǒng)的日志級別設置為更高的級別,例如 WARN。
6、日志記錄不是你只需要做的事情。 仔細查看你記錄的內(nèi)容、記錄時間和使用日志,對于進行快速研究或干預至關重要。盡管預防勝于治療,但總有可能有人破壞了你的系統(tǒng),而你希望防止進一步的損害。
想了解更多相關資訊請關注java培訓頻道-查看更多,了解相關專業(yè)課程信息您可在線咨詢也可免費申請試課。關注賦能網(wǎng)了解更多:4008-569-579
本文鏈接:
本文章“Java開發(fā)培訓之日志記錄是如何工作的”已幫助 82 人
免責聲明:本信息由用戶發(fā)布,本站不承擔本信息引起的任何交易及知識產(chǎn)權侵權的法律責任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓機構》培訓課程》學習資訊》課程優(yōu)惠》課程開班》學校地址等機構信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細解答:
咨詢熱線:4008-569-579