SQL笔记

SQL注入简介

       Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。

漏洞危害

SQL注入漏洞对于数据安全的影响:

  • 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
  • 网页篡改:通过操作数据库对特定网页进行篡改。
  •  
  • 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
  • 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
  • 服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
  • 破坏硬盘数据,瘫痪全系统。

有关SQL注入产生的原理要满足以下条件:

       程序编写者在处理程序和数据库交互时,使用了字符串拼接的方式构造SQL语句不安全的数据库配置,比如对查询集不合理处理,对sql查询语句错误时不当的处理,导致其错误信息暴露在前端
        过于信任用户在前端所输入的数值,没有过滤用户输入的恶意数据,且未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中,直接把用户输入的数据当做SQL语句执行,从而影响数据库安全和平台安全

几种基本SQL注入方式

  • 联合注入
  • 基于错误的注入
  • 布尔盲注
  • 延时注入
  • 使用SQLMAP       

SQL注入分类及判断

事实上SQL注入有很多种,按数据类型可以分为数字型、字符型和搜索型,按提交方式可分为GET型,POST型,Cookie型和HTTP请求头注入,按执行效果有可以分为报错注入、联合查询注入、盲注和堆查询注入,其中盲注又可分为基于bool的和基于时间的注入。从查询语句及可看出来这里是字符型的注入同时也是GET型注入和表单注入,数字型注入查询语句为:SELECT * FROM user WHERE id=1,搜索型注入为查询语句为:SELECT * FROM user WHERE search like '%1%'。

在知道查询语句的情况下我们很容易辨别是否存在注入及注入类型,很多时候我们并不知道查询语句是什么,所以我们可以这样判断,在URL或者表单中输入一个单引号或者其他特殊符号,页面出现错误说明此页面存在SQL注入,如果页面正常显示说明有字符被过滤或者不存在注入,读者可自行测试,如果存在注入可以进一步判断注入类型,在URL或者表单中输入0 or 1,如果可以查到数据,说明是数字型注入,如果输入0'or 1#,查到数据说明是字符型注入,方法不唯一。总之数字型注入不需要使用单引号闭合前面的单引号就可以执行SQL语句,而字符型必须闭合前面的单引号,然后才可以执行SQL语句,同时也需要把后面的单引号闭合,而注释就是很好的一种闭合后面的单引号的方法。

SQL注入带来的威胁主要有如下几点

  • 猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
  • 绕过认证,列如绕过验证登录网站后台。
  • 注入可以借助数据库的存储过程进行提权等操作

如何防止SQL注入

对于SQL注入的防御,我们最常用的就是使用过滤用户输入的恶意语句,或者对其进行转义等处理,但这些方法都不能完全的杜绝sql注入,就如使用过滤我们很容易就可以对它进行绕过,如使用注释,编码等方式,所以这些方法都不能从根源性防治sql注入,所以对于sql注入的防御我把它归为下面三类防御:

  • 使用参数化查询,检查变量数据类型和格式

在使用参数化查询的情况下,数据库不会将参数的内容视为SQL执行的一部分,而是作为一个字段的属性值来处理,这样就算参数中包含破环性语句(or ‘1=1’)也不会被执行,也就是说用户输入的变量不是直接嵌入到SQL语句中的,而是通过参数来传递这个变量的,是在数据库完成sql指令的编译后才套用参数运行,那么这样就可以有效的防治SQL注入式攻击

简单的说: 参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑,与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量

  • 采用sq语句预编译和绑定变量

采用PreparedStatement对SQL进行了预编译,如将sql语句:“ SELECT * FROM employees WHERE name = ?”预先编译好,即sql引擎会预先进行语法分析,产生语法树,生成执行计划;这样后面无论你输入什么参数,如(union,select)都不会影响该sql语句的语法结构了

  • 增强SQL数据交互点的过滤处理

如不能采取使用参数化查询和预编译变量,那最好就是加强对SQL数据交互点的过滤

        当然,sql注入还有更多的防范措施:

        1.不要随意开启生产环境中 Webserver的错误显示,这样一是容易暴露网站的非公开信息,(如web根目录),二是容易造成报错注入,如非法入侵者可通过extractvalue、updataxml 等函数对网站进行报错sql注入

       2.做好数据库帐号权限管理,只给访问数据库的web应用功能所需的最低权限帐号,不要随意使用root账号

       3.严格加密处理用户的机密信息,这样就算攻击者通过sql注入的到数据库信息,短时间也无法进行解密读取

       4.使用WAF等专业的防护软件系统,毕竟人力有限,总不可能24小时盯着数据库等关键服务器,这时候,waf等防护硬软件将会是我们的第一道防线

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值