在oracle中防止SQL注入
首先我尝试使用以下代码
strQuery = @"SELECT PASSWORD FROM IBK_USERS where upper(user_id) =upper('" + UserPrefix + "')"; try { ocommand = new OracleCommand(); if (db.GetConnection().State == ConnectionState.Open) { ocommand.CommandText = strQuery; ocommand.Connection = db.GetConnection(); odatareader = ocommand.ExecuteReader(); odatareader.Read();
最后我转换了上面的查询,以防止像这样的SQL注入
strQuery = @"SELECT PASSWORD FROM IBK_USERS where upper(user_id) =upper(:UserPrefix)"; try { ocommand = new OracleCommand(); if (db.GetConnection().State == ConnectionState.Open) { ocommand.CommandText = strQuery; ocommand.Connection = db.GetConnection(); ocommand.Parameters.Add(":UserPrefix",OracleDbType.Varchar2,ParameterDirection.Input); ocommand.Parameters[":UserPrefix"].Value = UserPrefix; odatareader = ocommand.ExecuteReader();
但这不起作用
删除参数名称前面的冒号。 而不是……
ocommand.Parameters.Add(":UserPrefix", ...);
…做这个…
ocommand.Parameters.Add("UserPrefix", ...);
同样用于设置参数值。
与您的问题没有直接关系:在WHERE子句中使用upper(user_id)
可能需要基于函数的索引才能有效运行。 另外, user_id
确实需要是一个字符串 – 你能不能只使它成为整数?