[研究]ASP.NET, Fortify SCA 報告 Missing Check against Null ( Low )
2024-03-06
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19
********************************************************************************
Fortify SCA 報告 Missing Check against Null 問題 ( 等級 Low ),把
string sessionID = Session["id"].ToString(); |
改成
string sessionID = Session["id"] != null ? Session["id"].ToString() : ""; |
問題依舊。
Filter Set 選 Quick View 時是沒有的,但選 Security Auditor View 會有。
********************************************************************************
string sessionID = ""; object idObject = Session["id"]; if (idObject != null) { sessionID = idObject.ToString(); } |
為了方便大量字串一行取代替換成另一行,可全部寫成一行
string sessionID = ""; object idObject = Session["id"]; if (idObject != null) { sessionID = idObject.ToString(); } |
這樣做的話,首先將 Session["oid"] 存儲在一個臨時變數 oidObject 中,然後檢查 oidObject 是否為 null。如果不為 null,則將其轉換為字串賦值給 sessionOID,否則將 sessionOID 設置為空字串。這樣就可以避免在 Session["oid"] 為 null 時引發異常。
********************************************************************************
User
為何 string sessionID = Session["id"] != null ? Session["id"].ToString() : ""; 這種寫法不行 ? 當 Session["id"] 為 null 時會回傳 "" 啊 ?
ChatGPT
對於一般情況來說,你提供的寫法是可以正確處理當 Session["userID"] 為 null 時的情況的,它會將 sessionID 設置為空字串。但是 Fortify SCA 可能仍然會識別這種寫法為有問題,原因可能是 Fortify SCA 的靜態程式碼分析檢查方式的限制或者可能存在一些特殊情況。
如果 Fortify SCA 報告中顯示這種寫法有問題,你可以嘗試使用更保守的寫法來解決這個問題,比如使用臨時變數進行明確的 null 檢查,這樣可以確保 Fortify SCA 不再報告這個問題。
********************************************************************************
public class Example { public static void Main() { // 調用副程式,並將 Session["id"] 的值傳遞給它 string sessionID = GetSessionID(Session["id"]); Console.WriteLine("Session ID: " + sessionID); } // 定義副程式,將 Session["id"] 的值轉換為字符串 public static string GetSessionID(object idObject) { // Fortify SCA 報告 Missing Check against Null ( Low ) // string sessionID = Session["id"].ToString(); // Fortify SCA 仍會報告 Missing Check against Null ( Low ),不認得這種精簡寫法 // string sessionID = Session["id"] != null ? Session["id"].ToString() : ""; string sessionID = ""; if (idObject != null) { sessionID = idObject.ToString(); } return sessionID; } } |
********************************************************************************
改用 ChatGPT 建議後,Fortify SCA 報告相同問題,有可能無法判斷那種精簡的寫法。
其實 低等級問題,一般不會強制要求解決,只是因為報告上數量很大,想試試看會否增加掃描速度、減少報告檔案體積。
(完)
相關
沒有留言:
張貼留言