我正在探索这个系统的 SQL 注入,发现即使使用参数化查询,正如SQL 注入预防备忘单所建议的那样,仍然可以执行 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 注入,所以我很惊讶它不是!
谁能给我一个关于如何以及为什么可能的详细解释?
先感谢您。