标签:
在搜索框中输入娱乐新闻‘)deletecategory where id=3--出现了如下所示状况。
可以看到,数据库中增加了一个娱乐新闻,但是同时id=3的那条记录从数据库中消失了,这是为什么呢?
看一下插入语句是怎么写的,Insertinto category(name) values(‘nfdsa‘),刚才在搜索框中输入的那些相当于两个单引号中的内容,把输入的内容放入这条插入语句中,结果变成了Insert into category(name) values(‘娱乐新闻‘)delete category where id=3--‘),因为使用的是拼接字符串,相当于写了两天完整的SQL语句,分别是Insert into category(name) values(‘娱乐新闻‘)和delete category where id=3,两个--相当于注释,注释后面的内容是忽略的。
因为SQL语句是通过拼接字符串实现的,那么就可以在拼接字符串里面做手脚。上面的那个例子就是人为的把拼接字符串补全,然后再删除一条记录。
那如何知道表的名字是category呢?方法很多。比如:
先猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
或者也可以这样
and exists (select * from 表名)
and exists (select 列名 from 表名)
返回正确的,那么写的表名或列名就是正确
当然,还有很多的方法。
那么如何避免SQL注入呢,插入的时候不要直接使用构造的SQL语句了。通过SQL参数的方法可以在一定程度上避免这一问题。
public int test() { int res; using (cmd = new SqlCommand("insert into category(name) values(@caName)", GetConn())) { cmd.Parameters.Add(new SqlParameter("@caName", "娱乐新闻c')delete category where id=5--")); res = cmd.ExecuteNonQuery(); } return res; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u010104750/article/details/46698407