定义
通过不正当的操作,恶意的欺骗服务器执行SQL命令,达到入侵者想要的结果。
方法
一、拼接字符串
就是将部分SQL语句,通过表单(输入框等)提交到数据库中,与设计者意图去执行的SQL语句一起拼接成新的SQL语句,最终达到欺骗服务器执行恶意的SQL命令。比如:
原来SQL语句:insert into category(name) values(‘"+caName+"’)
输入框中输入:娱乐新闻')deletecategory where id=3 --')
数据库执行SQL语句变成:insert into category(name) values(‘娱乐新闻’)delete category where id=3 --')
SQL语句改变后,将执行插入和删除两个操作。
二、查看错误页信息
web中的网址:http://www.xxx.com/Login.aspx?id=49 and user>0
在该网址中,user是SQL Server的一个内置变量,它的值是当前连接的用户名 ,是字符串类型。拿一个字符串的值跟int的0比较,系统会先试图将字符串的值转成int型。但是这样做会出错,SQL Server的出错提示:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,abc正是变量user的值,这样,入侵者就拿到了数据库的用户名。
防范
一、参数化查询
在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter)来给值。
二、表单中限制特殊字符及长度
特别要注意特别要注意单引号和数据类型的出现。
三、屏蔽详细错误信息传到客户端
通过config中的<customErrors>节点设置。
<!--出现错误的时候自动导向("~/error.html"是弹出页面的路径)-->
<customErrors defaultRedirect="~/error.html" mode="On" ></customErrors>
四、URL重写
URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成“UserProfile/1.aspx”
五、限制数据库的访问权限
设立不同用户的特殊权限,例如:用户名为1的用户只允许查询操作,然而用户1的信息被盗取登陆之后就不能对表进行别的操作,这样就一定程度上保证了数据的安全性。
总结
以前只知道有SQL注入这么一回事儿,但是从来没有用心的去查过。通过这一次的总结,让我对注入有了更深的理解,同时让我明白,数据库信息的安全非常重要,这是在以后开发中必须要想到的必要环节。