码迷,mamicode.com
首页 > 数据库 > 详细

SQL注入

时间:2015-02-04 18:51:10      阅读:239      评论:0      收藏:0      [点我收藏+]

标签: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--)

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

 

SQL注入

标签:sql注入

原文地址:http://blog.csdn.net/yxflovegs2012/article/details/43487641

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!