前言
最近系統被 Checkmarx V9.4.5 掃出有 Unsafe_Reflection 的問題,
程式碼中有透過傳入的 Type Name 及 參數值來動態建立物件執行該 Method 。
問題的來源是 Controller Action Method 的參數,
問題的目的地則是 Invoke Method 。
解決
查看 Checkmarx 中的 Search Rule 如下,
1 | CxList inputs = Find_Inputs(); |
似乎是透過 Method 的參數找相關的 method 是否有 Invoke ,
並且沒透過 if + 白名單 + Contains 去排除,
所以程式碼中包含 invoke 就被認為是有問題。
Checkmarx 建議的解法如下,
1 | public IActionResult MethodInvoker() |
原始程式碼類似如下,
1 | private dynamic CreateReport(string ReportName, string ReportPrintDate, string condition) |
雖然上述程式碼中有透過 LINQ 的 Where 判斷,但沒有 if + 白名單 + Contains 所以還是被 Checkmarx 認為有問題。
所以調整程式碼,讓它符合 if + 白名單 + Contains 就可以通過了,如下,
1 | private dynamic CreateReport(string ReportName, string ReportPrintDate, string condition) |