假设我要删除一个表,其名称是一个变量值,例如“#t”。
SqlCommand cmd = new SqlCommand( "drop table " + TableName ); //Not safe
SqlCommand cmd = new SqlCommand( "drop table [" + TableName +"]" ); //Not safe
EXEC( 'drop table [' + @tablename +"]" ); --Not safe
以上都不是安全的 SQL 注入,那么有什么替代方法呢?
人们说“你必须使用动态 SQL”,但这些示例仍然通常涉及不安全的连接,就像上面的第三个示例一样。
我能找到的最接近答案的东西(https://stackoverflow.com/a/14026855/88409)基本上说你必须自己做检查,而且没有办法解决它(即通过解析它确保变量是有效的或从可信赖的来源获取),但我对这个答案不满意。