展开
湖北国联计算机科技有限公司
  • 首页HOME
  • 公司简介INTRODUCTION
  • 安全防御DEFENSE
  • 软件开发SOFTWARE
  • 物联网IOT
  • 运行维护SRE
  • 成功案例CASE
  • 联系我们CONTACT
  • Defense Q&A |网安Q&A

    湖北国菱带你了解SQL
    来源:湖北国菱计算机科技有限公司-荆州网站建设-荆州软件开发-政府网站建设公司 时间:2021-01-12

    什么是SQL注入

    SQL 是用于访问和处理数据库的标准的计算机语言。

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

      

    SQL注入是由于开发人员把用户输入拼接进入数据库查询语句,导致原有查询语义被篡改。

    SQL注入技术分为报错注入、Union注入、时间盲注、布尔注入、堆叠注入等。

    SQL注入可被利用来完成获取数据库数据、提权、DOS等攻击。

    工具:SQLMAP、啊D、明小子

      

    Sql注入带来的威胁

    猜解后台数据库,盗取网站的敏感信息。

    绕过认证,列如绕过验证登陆网站后台

    注入可以借助数据库的存储过程中进行提权等操作。

    SQL注入常用函数

    Order by语句用于根据指定的列对结果进行排序。

    Union select union运算符可以将二个或二个以上select语句的查询结果集合合并成一个结果集合显示,既执行联合查询。

    Version ()版本

    User () 数据库用户名

    Database ()数据库名

    @@datadir 数据库路径

    @@version_compile_os –操作系统版本

    concat():连接一个或者多个字符串

    group_concat():连接一个组的所有字符串,并以逗号分隔每一条数据

      

    mysql 5.0版本以后提供了information.schema表,表中记录了数据库中所有的库、表、列等信息

    SCHEMATA表:储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等,show databases的结果取之此表

    TABLES表:储存mysql中的表信息,(当然也有数据库名这一列,这样才能找到哪个数据库有哪些表嘛)包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。show tables from schemaname的结果取之此表

    COLUMNS表:提供了表中的列信息,(当然也有数据库名和表名称这两列)详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,列的编码类型,列的权限,注释等。是show columns from schemaname.tablename的结果取之此表

    SQL注入攻击防御

    上面我们对SQL注入的原理和危害进行了讲解,并以攻击者的角度对SQL注入漏洞的利用过程进行了演示。下面我们以管理者的身份,从防御的角度来谈一下SQL防注入。
    通过SQL注入的原理我们得知,要想成功利用SQL注入漏洞,需要同时满足两个条件,一是攻击者可以控制用户的输入,二是注入的代码要被成功执行。下面的内容主要围绕这两个方面来展开。
    首先,我们需要对从其他地方传递过来的参数在进入数据库之前进行正确的处理。主要有以下几个方面:

    1.使用预编译语句,绑定变量。

    2.对传入的参数进行验证,确保符合应用中定义的标准。主要有白名单和黑名单两种方法来实现。从理论上来讲,白名单的安全性要比黑名单高,因为它只允许在白名单中定义的数据通过,其他数据都会被过滤掉。黑名单只会过滤定义在黑名单中的数据(比如SQL注入中的一些危险字符),通常使用正则表达式来实现。但需要注意的是,由于黑名单不可能包含所有的危险字符,所以可能会出现黑名单被绕过的情况。例如在mysql注入中,当在黑名单中过滤了空格字符,我们可以使用'/*(mysql中注释符)'和'+'来代替空格,绕过黑名单的限制继续注入,因此我们应该尽量多使用白名单。

    除了对用户的输入进行了验证之外,有时因为程序员的安全意识和技术问题,也可能只是一个小小的疏忽,都有可能产生SQL注入漏洞。还有一种情况是,我们发现了SQL注入漏洞,但是由于条件所限或者其他原因,不能从代码层来修复漏洞。比如在某一企业中有一套Web系统是由A程序员开发的,过了一段时间A离职了。后来,发现这套系统存在SQL注入漏洞,这时再让A程序员回来修复漏洞几乎是不可能的。而其他程序员由于对这套系统不熟悉或是因为技术问题没有能力修复这个漏洞。这种情况在中小企业更为普遍。这时我们虽然不能从代码层修复漏洞,但我们可以采用一些其他方式来阻止漏洞被利用成功,把面临的风险降到最低。如可以布署WAF(Web应用防火墙)来阻断SQL注入攻击,虽然有些攻击者可以绕过WAF的限制,但毕竟是少数。对于绝大多数的攻击WAF都是可以检测到并阻断。即便是高水平的攻击者,在布署WAF以后,也会明显使漏洞利用变得困难。

    最后,在数据库方面,应该使用“最小权限原则”,避免Web应用使用高权限账户直接连接数据库。如果有多个不同的应用使用同一数据库,则应该为每个应用分配不同的账户,并且只赋予必要的权限。

      

    总结

    其实在平常项目中,如果我们用了各种框架,并不需要我们来做防sql注入工作,因为框架已经帮我们封装好了,但是我们一旦用原始的获取用户输入值的方式,就必须注意防止sql注入了。sql注入攻防原理是必须懂的,并时刻谨记于心,安全无事小,必须在每一个环节都注意防护。

      


    荆州地区政府网站建设 解决方案 专业团队 腾讯第三方平台 地址:湖北省荆州市沙市区荆沙大道楚天都市佳园一期C区29栋112       地址:湖北省松滋市才知文化广场1141-1142号     邮编:434200 联系电话:0716-6666211     网站编辑部邮箱:business@gl-ns.com 鄂公网安备 42100202000212号 备案号:鄂ICP备2021015094号-1     企业名称:湖北国菱计算机科技有限公司