iT邦幫忙

0

Parameter Tampering in VB.Net

年前我被請託救援一個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: 上面的方法不行。

看更多先前的討論...收起先前的討論...
froce iT邦大師 2 級 ‧ 2020-02-13 22:17:04 檢舉
加個regex檢查試試看?
<form id="form1" >
<asp:TextBox ID="SSN" />
<asp:RegularExpressionValidator ID="regexpSSN"
ErrorMessage="Incorrect SSN Number"
ControlToValidate="SSN"
ValidationExpression="^\d{3}-\d{2}-\d{4}$" />
</form>

或是在後端直接加。

因為asp .net webform很久沒碰了,不太清楚框架會對帶進去的參數檢查到什麼地步。
不過看你的code應該可以靠regex檢查。
froce iT邦大師 2 級 ‧ 2020-02-13 22:24:08 檢舉
https://www.w3school.com.cn/aspnet/aspnet_controls.asp
找了個測試asp .net webform的網頁,感覺沒做驗證可以玩的東西很多。(茶
bizpro iT邦大師 1 級 ‧ 2020-02-14 11:30:25 檢舉
謝謝回覆。
因為是Gridview, 所以是用CommandArgument傳進caseid,應該和ASP沒有直接關係,我懷疑是Checkmarx對e.CommandArgument感冒,我已將e.CommandArgument當作參數傳進一個Sub中,看看是否過關。
bizpro iT邦大師 1 級 ‧ 2020-02-20 23:56:54 檢舉
我已解決CheckMarx的問題了.
原本是自前端ASP:Gridview中以CommadArgument傳回caseid, 改為只取回列號,再由列號在後端取得caseid資料,也就是不自前端傳遞caseid到後台。
...
但,Checkmarx真是這樣運作的嗎?我是存疑的,Checkmarx基本上並不會智慧地判斷是否caseid是由後端取得。

尚未有邦友回答

立即登入回答