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注入,所以我很驚訝它不是!
任何人都可以請給我一個關於如何和爲什麼可能的詳細解釋?
預先感謝您。
什麼是名字?似乎是一個字段名稱,但用作參數。這似乎是一個編碼錯誤。 – Steve
我不認爲你實際上在使用參數,你仍然將SQL字符串與'||'運算符連接起來。嘗試重寫你的查詢爲'「SELECT name,age FROM people where'name'%?'''' – Wolf
@Steve,實際上這只是真實系統的表示,因爲我不能透露任何名稱原始系統的信息。在這種情況下,「名稱」是表人員中列的名稱,但實際上列的實際名稱並不真正使用「受限制」或「保留」字。 – Deep