我不認爲我的呼吸了在這一個部分外的即裝即用的解決方案。除了您自己的日誌記錄之外,您還必須關注由您的依賴關係完成的日誌記錄。也就是說,您有兩個工作領域:進入日誌的內容以及誰可以訪問日誌。
就日誌而言,解決此問題的最佳工具是教育和協作(包括上述代碼評論)。首先編寫一份記錄的非功能性需求清單,其中包括解決記錄什麼和如何記錄的安全性(標記,級別,敏感參數等)。我建議與同事們一起定義這份清單,以便它不會被稱爲「Ravi的伐木運動」而不是「我們真正需要做的事情」。
一旦該列表被定義並且您得到了您的同事和/或管理層的支持,您可以編寫用於記錄實現的包裝器,以支持您組裝的非功能性記錄需求列表。如果確實需要記錄敏感參數,請提供一種參數非對稱加密方式,供以後通過根帳戶進行檢索:例如存儲在只能由root/container訪問的文件中的加密密鑰。對於管理層而言,您可能需要花一些時間撰寫價值主張來描述爲什麼您的計劃對貴公司有價值。
下一步與誰定義您的SLDC的工作 - 確保您的SDLC的變化是外部溝通。讓他們爲您的公司創建一個安全編碼清單,並在其上實施一項內容:所有日誌記錄均使用OurCompanySecureLogger實施。現在你可以開始致力於實施這一舉措。我建議在構建服務器上編寫一個檢查依賴關係,如果它發現直接引用log4j,slf4j,logback等,則構建失敗。
關於另一半問題,請與您的SysOps團隊一起工作定義職責分離的規則。也就是說,軟件工程師不應該訪問正在執行日誌記錄的服務器。如果您現在沒有足夠的人員來支持這個想法,那麼您可能需要發揮創意。
這樣的事情無法通過工具100%解決,因爲即使您進行靜態代碼分析,只有當您的日誌變量名稱或信息文本實際包含「user」或「password」等子字符串時纔可以使用。如果他們不這樣做,你無法檢測到它。你有沒有聽說過稱爲代碼審查這個有趣的事情?我聽說它是有幫助的。 – kriegaex