什么是sql注入? 怎么修复该漏洞

          SQL注入通常是指将SQL命令插进Web报表递交或输入域名或页面请求的查询字符串,最终实现欺骗服务器恶意的SQL命令。总的来看,运用现有的应用程序,将(恶意)SQL命令注入后台数据库引擎的执行能力,通过在网络表单中输入(恶意)SQL语言,可以获得存在安全漏洞的网站数据库,而不是根据设计者的意图执行SQL语言SQL注入脆弱性的原因有两个。一个是没有过滤输入的数据(过滤输入),另一个是没有转义发送到数据库的数据(转义输出)。

测试方法:

1.通过网络脆弱性扫描工具检查网站爬虫后获得的所有链接,或者手动判断注入点是否存在,如果确认有脆弱性,可以使用自动工具sqlmap进行注入。几种常见的判断方法:

1)数字型

http://host/test.phpid=100and1=1回归成功。

http://host/test.phpid=100and1=2返回失败。

2)文字型。

http://host/test.phpname=rainmanand1=1回到成功。

http://host/test.phpname=rainmanand1=2回到失败。

3)搜索型,检索型注入:简单判断检索型注入脆弱性的方法如下,首先搜索,如果有错误,说明90%有这个漏洞。然后搜索(%),正常回来的话,95%有洞。然后再搜索一个关键词,例如(2005),正常返回所有与2005相关的信息。再搜索(2005%‘and1=1and‘%’=’)和(2005%‘and1=2and‘%’=’)

不一样的SQL服务器连接字符串的语法不一样。例如,MSSQLServer使用符号+连接字符串,Oracle使用符号||连接:

2.如果应用程序过滤了+等特殊文字,输入时可以将文字转换为URL代码(即文字ASCII代码的16进制)进行检查。例如:暂时没有。这里经常伴随着万能密码的脆弱性,所以不展示。风险分析:在输入URL和报表的地方,攻击者通过输入精心构造的SQL语句,对数据库除数据库记录,直接获得服务器的权限。攻击者实施SQL注入攻击时,多使用山甲、明子、sqlmap、Havij等自动注入工具。

修复方案:

SQL注入的主要原因是程序没有严格过滤用户输入的数据,导致非法数据入侵系统。

1)严格过滤用户输入的特殊字符,如<、>、/、*、+、&、|、(、)、and、or、select、union。

2)使用参数查询,避免将未过滤的输入直接连接到SQL查询句中。

3)网络应用程序中连接数据库的用户和数据库的系统管理者用户的权限有严格的区别(drop等无法执行),网络应用程序中连接数据库的用户不允许操作其他数据库。

4)设置网络应用程序连接数据库的用户不允许网络目录写作权限。

5)使用网络应用防火墙。

分享: