您的位置:首页 > 博客中心 > 数据库 >

浅入浅出SQL注入

时间:2022-03-14 11:27

技术分享

在搜索框中输入娱乐新闻‘)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;
}


技术分享




版权声明:本文为博主原创文章,未经博主允许不得转载。

热门排行

今日推荐

热门手游