原理篇——sql注入1:基础

一、sql注入简介

  SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

二、常见的sql注入分类

  1.按参数类型分类

    ·数字型注入:输入参数为整型时,如id、年龄和页码等。这一类的sql语句原型大概为select * from 表名 where id=1。

    ·字符型注入:输入参数为字符型时,如姓名、职业等;这一类的sql语句原型大概为where name='admin'。需要注意的是这里的引号有时也可能为双引号

  2.按回显类型分类

    ·sql回显注入

     SQL回显注入又可以分为:

       a.union联合查询注入

       b.报错注入

    ·sql盲注

       a.布尔盲注

       b.时间注入

  3.按提交方式分类

    ·GET注入:注入字符在URL参数中;

    ·POST注入:注入字段在POST提交的数据中;

    ·cookie注入:注入字段在Cookie数据中,网站使用通用的防注入程序,会对GET、POST提交的数据进行过滤,却往往遗漏Cookie中的数据进行过滤。

    ·HTTP头部注入:HTTP请求的其他内容触发的SQL注入漏洞;

三、SQL注入的危害 

   1. 从数据库中读取敏感数据;

  2. 篡改数据库数据;

  3. 对数据库执行管理权限操作;

  4. 执行系统命令导致程序危害发生;

四、预防措施  

  1. 使用预编译。

  2. 对进入数据库的特殊字符(’”尖括号&*;等)进行转义处理,或编码转换。

  3. 严格限制变量类型,比如整型变量就采用intval()函数过滤,数据库中的存储字段必须对应为 int 型。

  4. 数据长度应该严格规定,能在一定程度上防止比较长的 SQL 注入语句无法正确执行。(前后端同时限制)

  5. 网站每个数据层的编码统一,建议全部使用 UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。(UTF-7 / 宽字节注入 )

  6. 严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。(最小权限原则)

  7. 避免网站显示 SQL错误信息,统一返回错误页面,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。

原文地址:https://www.cnblogs.com/guoqingsentou/p/13485200.html