SQL注入攻击入门篇

来源:互联网 发布:mysql 5.7 zip 下载 编辑:程序博客网 时间:2024/06/05 19:49

  • 1前言
  • 2什么是SQL
  • 3什么是SQL注入
    • 1SQL注入攻击实例
    • 2SQL注入代码展示
    • 3SQL注入方法解说
  • 4防止SQL注入
  • 5结束语

1、前言

  不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动。在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问,我们真的了解SQL注入吗?看完本篇文章希望能让你更加深刻的认识SQL注入。

2、什么是SQL?

  SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。

3、什么是SQL注入?

  SQL注入就是一种通过操作输入来修改后台SQL语句达到代码执行进行攻击目的的技术。构造动态字符串是一种编程技术,它允许开发人员在运行过程中动态构造SQL语句。开发人员可以使用动态SQL来创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL语句。当开发人员在运行过程中需要根据不同的查询标准来决定提取什么字段(如SELECT语句),或者根据不同的条件来选择不同的查询表时,动态构造SQL语句会非常有用。

3.1、SQL注入攻击实例

强悍的SQL注入攻击

  这是一张相当有技术含量的号牌遮挡,其对交警系统SQL Injection的hack䅁例。当摄像头拍到你车牌号并把其转成文本后,插入数据库时的SQL注入。看到了吧,千万别惹程序员。

漫画版SQL注入攻击

3.2、SQL注入代码展示

public bool IsExist(string caName)        {            bool flag = false;            string sql = "select * from category where [name]='" + caName + "'"; //在这里产生SQL注入问题            DataTable dt = sqlhelper.ExecuteQuery(sql);            if (dt.Rows.Count > 0)            {                flag = true;            }            return flag;        }

3.3、SQL注入方法解说

1. 输入正常数据:

正常数据

  合并的SQL为:

select * from category where [name]= ‘哈哈新闻’

2. 输入注入数据:

注入数据

所选择的数据“哈哈新闻”记录不存在了 O(∩_∩)O~
合并的SQL为:

select * from category where [name] = ‘哈哈新闻’ delete categoty where id=129

4、防止SQL注入

public bool IsExist(string caName)        {            bool flag = false;            string sql = "select * from category where [name]=@caName";            SqlParameter[] paras = new SqlParameter[]{            new SqlParameter ("@caName",caName  )             }; //参数化查询            DataTable dt = sqlhelper.ExecuteQuery(sql);            if (dt.Rows.Count > 0)            {                flag = true;            }            return flag;        }

  参数化查询(Parameterized Query)

  a) 检查客户端脚本,类型检查,长度验证,使用枚举,明确的关键字过滤这些操作也是需要的。他们能尽早检查出数据的有效性。
  b) 参数化查询原理:在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数运行,因此就算参数中含有具有损的指令,也不会被数据库所运行。
  c) 所以在实际开发中,入口处的安全检查是必要的,参数化查询应作为最后一道安全防线。
优点:
  防止SQL注入(使单引号、分号、注释符、xp_扩展函数、拼接SQL语句、EXEC、SELECT、UPDATE、DELETE等SQL指令无效化),参数化查询能强制执行类型和长度检查。
在MSSQL中生成并重用查询计划,从而提高查询效率(执行一条SQL语句,其生成查询计划将消耗大于50%的时间)
缺点:
  不是所有数据库都支持参数化查询。目前Access、SQL Server、MySQL、SQLite、Oracle等常用数据库支持参数化查询。
(参数化查询仅仅是SQL注入问题的解决方法之一,在这里小编就只简单介绍这一种,等待你的发现哦~~)

5、结束语

  • 学习新的知识总是在原有的基础上进步。站在巨人的肩膀上看风景,不要被巨人踩在脚底下。
  • 在学习之余,不要忘记快乐的学习才是真正的学习。所以,小编在文中配了几张关于SQL注入的小图,很有意思。
  • 有一颗闪闪发亮(现)的❤❤❤

    以上理解仅供参考,如果有不对的地方,还请指出。

2 0
原创粉丝点击