2013-06-18 13 views
0

我正在探索這個SQL注入系統,甚至使用參數化查詢發現,完全按照SQL Injection Prevention Cheat Sheet的建議,它仍然可以執行SQL注入!使用OleDb和Oracle在VB.NET代碼中確認SQL注入,即使使用參數化查詢!怎麼可能?

VB.NET代碼和查詢:注射的

Dim OleCommand As New OleDbCommand("SELECT name, age FROM people WHERE name LIKE '%' || ? || '%'", OleConnection) 
OleCommand.Parameters.Add("name", OleDbType.VarChar).Value = txt_name.Text 

例成功使用:

' UNION ALL select banner,null from v$version -- 
' UNION ALL select username,null from ALL_USERS -- 

在我所有的研究(包括Satckoverflow一些話題)我經常閱讀參數化查詢如何足以防止SQL注入,所以我很驚訝它不是!

任何人都可以請給我一個關於如何和爲什麼可能的詳細解釋?

預先感謝您。

+0

什麼是名字?似乎是一個字段名稱,但用作參數。這似乎是一個編碼錯誤。 – Steve

+1

我不認爲你實際上在使用參數,你仍然將SQL字符串與'||'運算符連接起來。嘗試重寫你的查詢爲'「SELECT name,age FROM people where'name'%?'''' – Wolf

+0

@Steve,實際上這只是真實系統的表示,因爲我不能透露任何名稱原始系統的信息。在這種情況下,「名稱」是表人員中列的名稱,但實際上列的實際名稱並不真正使用「受限制」或「保留」字。 – Deep

回答

0

嗯,這是令人尷尬......

其實開發團隊沒有正確部署固定的代碼,所以我測試的舊代碼,因此,該漏洞似乎堅持。

簡而言之:上面的代碼實際上是防止SQL注入的!

對不起,推遲和感謝沃爾夫和史蒂夫爲您的想法。

相關問題