delcare @str varchar(100)
set @str = 'xxxx--;delete from tb'
select * from tb where col = @str
------
declare @sql varchar(100)
set @sql = 'select * from tb where col='''+@str+''''
exec(@sql)
[Quote=引用 2 楼 wnyxy 的回复:]
stirng nn="aa or 1=1";
"select * from tb where t1='"+nn+"'";
//防注入
"select * from tb where t1=@N";
cmd.Parameters.Add(new SqlParameter(@N,aa or 1=1));
[/Quote]
引用哈这位哥们的哈。其实原理很简单,@是C#中强制转换符吧(不是专业术语),@String 的意思是,String里的所有符号都是其符号意思,不存在任何特殊意义。例如String里有“或者‘,其本意就是’,不会把它当成 sql语句里的‘,我们常规的sql操作语句当中一般会是这样
string StuName=TextBox1.Text;
string str="select * from StudentInfo where stuName='"+StuName+"'";
StuId是别人来输入的。假设我输入的格式为StuName是 ' and stuid='12
那么连起来 str=select * from StudentInfo where stuName='' and stuid='12'
当然输入的不可能是多加个where判断条件,万一是删除呢?这个就是sql注入产生的原因。
如果
string str="select * from StudentInfo where stuName='"+@StuName+"'";
这样的话 sql注入就没办法了。因为它会因为有@把StuName里的东西当成一个整体,一个字符串没有任何特殊意义,'就失去sql语句的意义。
这个是我个人目前理解,有错的地方,大家可以说说。
上面代码随意打的,没有vs测式,只是表示一个意思。
delcare @str varchar(100)
set @str = 'xxxx--;delete from tb'
select * from tb where col = @str
------
declare @sql varchar(100)
set @sql = 'select * from tb where col='''+@str+''''
exec(@sql)