前言
當系統有將外部資料(Post or Get or Session … 的值)寫入Log時,
就會被 Checkmarx 找出有 Log_Forging 的問題。
因為怕該內容裡面放了換行符號,
導致 Log 被偽造,例如原本使用者登入會寫一個 Log 為
login ok rm 或是 login fail rm
那如果帳號的內容改成 “admin” + NewLine + “login ok admin”,
而 Log 就會變成
1 | login fail admin |
那要如何修正呢?
修正
所以在寫入 Log 時,需要將換行給置換掉,所以 Checkmarx 提供的範例如下,
1 | Log.Write(logDetails.Replace("\n", "").Replace("\r", "")); |
但這樣明明就把換行給 Replace 了,還是會被 Checkmarx 掃出來有風險。
怎麼辦呢?
- Way-1: 寫入值判斷為 Int, Bool, GUID 等型態後,再寫入 Log
- Way-2: 不要寫入外部的資料到 Log 中
- Way-3: 改用別的寫Log的 Method Name ,例如 Loger.Log 而不是 Write
- Way-4: 使用 Reflection 來避掉,如下,
1 | yourLogObj.GetType().GetMethod("Write", BindingFlags.Public | BindingFlags.Static).Invoke(null, new object[] { logDetails.Replace(@"\n", "").Replace(@"\r", "") }); |