浅谈SQL注入及其防御技术
什么是SQL注入
就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
SQL注入是影响企业运营最具有破坏性的漏洞之一。
应用程序向后台数据库进行SQL查询时,如果为攻击者提供了影响该查询的能力,就会引起SQL注入。
初步注入–绕过验证,直接登录
中级注入–借助异常获取信息。
危害扩大–获取服务器所有的库名、表名、字段名
最终目的–获取数据库中的数据
- SQL注入不仅能通过输入框,还能通过Url达到目的。
- 除了服务器错误页面,还有其他办法获取到数据库信息。
- 可通过软件模拟注入行为。
- 漏洞跟语言平台无关,并非asp才有注入漏洞而asp.net就没有注入漏洞,一切要看设计者是否用心。
原理分析
在接口中接受了一个String类型的name参数,并且通过字符串拼接的方式构建了查询语句。在正常情况下,用户会传入合法的name进行查询,但是黑客却会传入精心构造的参数,只要参数通过字符串拼接后依然是一句合法的SQL查询,此时SQL注入就发生了。SQL Injection原因就是由于传入的参数与系统的SQL拼接成了合法的SQL而导致的,而其本质还是将用户输入的数据当做了代码执行。在系统中只要有一个SQL注入点被黑客发现,那么黑客基本上可以执行任意想执行的SQL语句了
SQL注入过程
- 判断Web环境是否可以SQL注入。
- 寻找SQL注入点。
- 猜解用户名和密码。
- 寻找WEB管理后台入口。
- 入侵和破坏。
SQL攻击特点
- 变种极多,有经验的攻击者会手动调整攻击参数,致使攻击数据的变种是不可枚举的,这导致传统的特征匹配检测方法仅能识别相当少的攻击,难以防范。
- 攻击过程简单,目前互联网上流行众多的SQL注入攻击工具,攻击者借助这些工具可很快对目标WEB系统实施攻击和破坏。
- 危害大,由于WEB编程语言自身的缺陷以及具有安全编程能力的开发人员少之又少,大多数WEB业务系统均具有被SQL注入攻击的可能。而攻击者一旦攻击成功,可以对控制整个WEB业务系统,对数据做任意的修改,破坏力达到及至。
SQL注入防御措施
-
预编译防御
预编译防御是当前企业使用最多的一种防御机制。
在数据库文件中,会对sql语句进行预编译,例如String sql = "select id, no from user where id=?";
,也就是说此时的sql语句已经通过了预编译,生成了语法树,此时,不管你后面输入什么样的参数,因为语法分析已经完成了,而语法分析就是对sql命令的分析,也就是说是对select ,from ,where ,and, or ,order by
等命令的分析,所以,后面输入的命令不会被当成是sql命令来执行了,只会当做是字符串来处理。 -
转义特殊字符
利用addslashes
函数对一些特殊的字符进行转义。
在sql注入中,经常需要使用提前闭合的方式进行注入,而使用addslashes函数可以将' " )
等等字符进行转义,导致无法进行闭合。此时就可以保证无法进行sql注入了。