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--)

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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。