SQL注入

       在做VB版机房收费系统的时候就了解到了SQL注入,那个时候再网上查了一些资料,感觉很高大上也没有弄得很懂,这次再看到SQL注入,弄清楚了它的来龙去脉。

       所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。——百度百科

       看到这么一堆的解释还是没有很懂,下面来看一个例子。

 

       在我们设计的web窗体中有一个Text文本框用来输入字符串,添加类别。当然这个记录要添加到数据库中,当让要使用SQL语句。

       如果我们的sql语句这这样写的

D层SQL语句     

       String sql ="insert into category(name) values('" + caName + "')"
       //这里的" + caName + "就是参数

省略B层

U层    

       String category=txtCa.text.trim();
       //将输入到文本框中的字符串当做参数,通过B层传到D层。

       一般的如果我们在U层中的text输入的是“体育新闻”,那么在D层的sql语句是:insert into category(name) values(' 体育新闻 ')"  这样没有问题可以将类别添加到数据库的表中。

 

       但是如果有人在文本框中输入的是这样的非正常字符串:社会新闻 ' )Delete category where ID=3--

       把这一长串的字符当做参数传到到D层之后SQL语句就会变成这样:

         insert intocategory(name) values(' 社会新闻 ' )Delete category where ID=3--')

       要注意“--”在sql语句中是注释作用,所以到最后执行的语句就是添加“社会新闻”的同时,将ID为3 的新闻类别删除。

这样就会对我们的数据库的数据有所破坏。

解决:

       为避免SQL注入,我们在写SQL语句的时候就要避免使用字符串的拼接,要使用参数来进行。如上面例子中的参数" + caName + "可以使用 

       new SqlParameter(“@caName”, category);

       这样sql语句可以写成:

       String sql= Stringsql = "insert into category(name) values(@caName);

       这样如果还是输入了非正常字符串,拼接之后就是得到sql语句:

       insert into category(name) values(社会新闻 ' )Deletecategory where ID=3--)

      虽然就缺少了一个’ ,数据就没有办法识别该语句会报错,这样避免数据库的数据库遭到破坏。

 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值