年前我被請託救援一個VB.Net的系統,原本完全不會Windows平台,IIS, VB.Net, ASP, SQL Server, VS, Windows Server, Crystal Reports,...都沒用過,二週的時間,從零開始搞定上線, 成功救援此系統,IBM AppScan都沒問題,但卡在Checkmarx...
以下只是一個基礎的ExecuteReader程式碼,對ExecuteNonquery也是一樣的,從使用者端ASP:Gridview傳進一個GridViewCommandEventArgs e的e.CommandArgument,這是傳進來的ID,
...
conn.Open()
Dim cmd As SqlCommand = New SqlCommand
Dim sqlstr As String = ""
Dim caseid As String = e.CommandArgument
cmd.Parameters.AddWithValue("caseid", caseid)
sqlstr = "select * from dbcase where caseid=@caseid"
cmd.CommandText = sqlstr
cmd.Connection = conn
Dim rd As SqlDataReader = cmd.ExecuteReader()
...
CheckMarx說,這有Parameter Tampering的風險。依據
https://www.youtube.com/watch?v=l5LCDEDn7FY&hd=1
應該沒問題啊.
弔詭的是,CheckMarx只針對一些aspx.vb檔發出中風險警告,而"同樣的"程式碼在某些檔案中是沒有問題的。也就是說,Checkmarx對同樣的程式碼有不同的判斷。 另外,如果沒有ExecuteReader或ExecuteNonquery,也沒問題
我打算把ExecuteReader, ExecuteNonquery封裝在一個Procedure中,看看是否CheckMarx不找麻煩。
Private Sub execSQL(ByRef cmd As SqlCommand, ByRef sqlstr As String)
cmd.CommandText = sqlstr
cmd.Connection = conn
cmd.ExecuteReader()
End Sub
請教有其他建議嗎?
20200217T1645: 上面的方法不行。