以下是MSDN Magazine 里面的一段文章:
我很好奇这样到底能不能够注入SQL, 所以我建了个 console 程序
static void Main(string[] args) { SqlConnection conn new SqlConnection(); conn.Open(); string commandtext = "exec SetPassword ‘admin‘--‘,‘dummy‘,‘newpassword‘"; SqlCommand command = new SqlCommand(commandtext,conn); command.ExecuteNonQuery(); }
然后我得到了一个异常,异常信息是:
Procedure or function ‘SetPassword‘ expects parameter ‘@old‘, which was not supplied.
所以我们可以看到想通过这种方式注入SQL是不可行的,使用存储过程已经把“参数”参数化了,并且是按照一定的执行计划来执行的。