2013-05-14 73 views
0

我在兩個不同的表用戶表和帶表創建一個問題查詢:加入查詢VB.net DataReader的

cmd.CommandText = "SELECT zone_name, zone_difference FROM user_master INNER JOIN zones on user_master.zone_id = zones.ID WHERE user_master.uname LIKE " & """" & usr_gl & """" 

Dim reader_q As OleDbDataReader 

reader_q = cmd.ExecuteReader() 

這裏,區域名稱和差異是由區表和zone_id(顧客)和ID (區域)有關係,用戶名(uname)也是來自外部,例如usr_gl變量「admin」

這是說沒有給出一個或兩個參數的值。我檢查了所有的表格列和數據。相同的查詢獨立於Access數據庫運行。

我在這裏執行有什麼問題嗎?

+0

'usr_gl'的運行時值可能是將參數語法元素注入查詢並混淆查詢解析器?即使您認爲您可以控制輸入值,使用類似字符串連接來構建數據庫查詢也是非常危險的。如果您修復SQL注入漏洞並使用參數化查詢,問題是否會持續存在? – David 2013-05-14 12:23:10

回答

0

是的,你正在試圖連接字符串,這是一個NO-NO代碼

cmd.CommandText = "SELECT zone_name, zone_difference FROM " & _ 
        "user_master INNER JOIN zones on user_master.zone_id = zones.ID " & _ 
        "WHERE user_master.uname LIKE ?" 

cmd.Parameters.AddWithValue("@p1", usr_gl) 
Dim reader_q As OleDbDataReader 
reader_q = cmd.ExecuteReader() 

字符串連接被認爲是不好的做法,因爲很多問題都與 正確的字符串格式出現(帶引號,小數點,日期)是第一個問題,但Sql Injection是最糟糕的。使用參數化查詢應該可以避免所有這些問題