漏洞
SQL注入漏洞是当一个Web应用把用户输入当作SQL语句执行时会出现的漏洞。即,用户输入的内容被当作SQL语句的一部分而被执行,从而引发危险的远程代码执行攻击,影响到Web应用的数据安全性和稳定性。
SQL注入漏洞是最常见的Web应用漏洞之一,也是发起的攻击最为强力的一种方式。由于SQL注入漏洞的出现,攻击者可以窃取敏感信息,破坏数据库和系统,删除或修改数据,甚至拿到服务器的控制权,形成远程权限提升和命令执行。
SQL注入漏洞的原因是由于Web应用对用户输入数据未经过过滤就将用户提交的内容当作SQL语句执行,从而导致Web应用可以处理非法SQL语句,让攻击者可以自定义任意SQL语句,攻击者可以通过它来控制数据库中的数据。
一般的SQL注入攻击都是利用恶意的输入来执行SQL命令,例如在用户名口令认证功能中恶意输入SQL语句,针对参数(字符串)注入,组合sql语句,利用数字等型进行猜出表名,字段名,以及执行管理员操作,未授权数据库访问等。具体的,原因很多,可大致细化为:
1.当文件写入或更新操作中未检查用户输入;
2.网站调用数据库查询时,用户输入的内容没有过滤,导致SQL关键字被直接当作SQL的一部分执行;
3.当某些重要的SQL关键字被过滤掉时,出现了型号转换漏洞,攻击者可以使用替代字符,进而危害到网站安全;
4.在字符串比较中出现特殊字符,像关键字、条件语句都会被视为SQL有效语句,导致SQL语句有语法错误,调用系统函数大法;
5.增加用户表、用户组表字段长度,如使用长度不合理的字段来做登录等处理;
6.SQL数据库字段、字符类型错误,数据库内建函数的漏洞,主机上的系统漏洞,存储过程的漏洞等等。
要防止SQL注入漏洞,服务器端应当对从客户端接收的数据进行过滤。过滤的过程应当根据具体的需求,考虑那些信息是安全的,避免攻击者通过提交表单向服务器传输敏感信息,例如下列字符:';(单引号)、"(双引号)、(反斜杠)、--(连字符)。
另外还应当禁用服务器端脚本,检查用户输入是否具有足够权限,调整安全设置等一些比较可靠的办法,以期避免SQL注入漏洞。