• SQL注入


    一、什么是SQL注入

    针对 Web 应用使用的数据库,通过运行非法的 SQL 而产生的攻击。

      Web 应用通常都会用到数据库,当需要对数据库表内的数据进行检索或添加、删除等操作时,会使用 SQL 语句连接数据库进行特定的操作。如果在调用 SQL 语句的方式上存在疏漏,就有可能执行被恶意注入(Injection)非法 SQL 语句。

    下面就举例说明一下sql注入:

    1、数字注入

    • 正常查询数据
    --所有数据
    mysql> select * from class
    +-----+----------+
    | cid | caption  |
    +-----+----------+
    |   1 | 三年二班 |
    |   2 | 一年三班 |
    |   3 | 三年一班 |
    |   5 | 四年一班 |
    +-----+----------+
    4 rows in set (0.01 sec)
    
    --加入条件获取数据
    mysql> select * from class where cid>2;
    +-----+----------+
    | cid | caption  |
    +-----+----------+
    |   3 | 三年一班 |
    |   5 | 四年一班 |
    +-----+----------+
    2 rows in set (0.01 sec)
    • 进行sql注入
    --可以看到根据条件查询,但是却获取到所有的数据
    mysql> select * from class where cid>2 or 1=1;
    +-----+----------+
    | cid | caption  |
    +-----+----------+
    |   1 | 三年二班 |
    |   2 | 一年三班 |
    |   3 | 三年一班 |
    |   5 | 四年一班 |
    +-----+----------+
    4 rows in set (0.00 sec)

    这里SQL注入使用的漏洞就是MySQL语句中的where条件语句中参数攻击,也就是cid>2 or 1=1,or后面1=1为真就会走第二个条件,查询所有的内容。

     2、以注释符号‘ -- ’来实现注入

    • 正常查询数据
    --正常查询数据
    mysql> select * from class where cid > 1 and caption='三年一班';
    +-----+----------+
    | cid | caption  |
    +-----+----------+
    |   3 | 三年一班 |
    +-----+----------+
    1 row in set (0.00 sec)
    • 注释‘--’注入

    mysql> select * from class where cid > 1 -- and caption='三年一班'
        -> ;
    +-----+----------+
    | cid | caption  |
    +-----+----------+
    |   2 | 一年三班 |
    |   3 | 三年一班 |
    |   5 | 四年一班 |
    +-----+----------+
    3 rows in set (0.00 sec)

    注释‘--’后面的SQL语句会被忽略掉,所以执行的还是‘--’之前的语句

    二、预防SQL注入

    1、校验输入变量的类型和格式

    • 利用后台语言的一些方法进行判断

    对cid的值进行检验,对其进行非空以及是否为数字进行校验,例如在python的后台进行cid的校验:

    >>> cid=1
    >>> isinstance(1,int)
    True
    >>>
    • 可通过正则进行校验

    >>> import re
    >>> cid='1'
    >>> re.match('[0-9]*',cid).group()
    '1'
    >>> cid = '13'
    >>> re.match('[0-9]*',cid).group()
    '13'

    2、加密处理

    比如对用户的用户名和密码进行加密处理保存到数据库中,然后前端用户输入的用户名和密码进行加密后与数据库中的进行比较,这样就避免了SQL的注入。

  • 相关阅读:
    vue项目搭建
    iview在ie9及以上的兼容问题解决方案
    中山大学校队内部选拔赛试题试题2【New Year Gift】--------2015年2月8日
    中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
    ZOJ2812------2015年2月4日
    C++STL泛型编程基础知识讲解--------2015年2月3日
    中山大学校队选拔赛第一章题4【简单数迷Simple Kakuro】-------2015年1月28日
    UVALive
    UVA11375【火柴拼数Matches】-------2015年1月27日
    递推关系的运用加简单DP【UVA11137Ingenuous Cubrency】-------2015年1月27日
  • 原文地址:https://www.cnblogs.com/shenjianping/p/11721838.html
Copyright © 2020-2023  润新知