先看一副有趣的漫画

这幅画就是sql注入的精华了。

什么是SQL注入:

SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。大家也许都听过某某学长通过攻击学校数据库修改自己成绩的事情,这些学长们一般用的就是SQL注入方法。

SQL注入其实就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。简单来说,就是数据「越俎代庖」做了代码才能干的事情。

这个问题的来源是,SQL数据库的操作是通过SQL语句来执行的,而无论是执行代码还是数据项都必须写在SQL语句之中,这就导致如果我们在数据项中加入了某些SQL语句关键字(比如说SELECT、DROP等等),这些关键字就很可能在数据库写入或读取数据时得到执行。

下面就举一个例子来看看。

比如我们用java来写一个管理系统,我们就叫学生管理系统吧,这个时候我们要做什么事情呢?

我们要做这样一个系统肯定会少不了跟数据库交互,那么我们假设

           Class.forName("com.mysql.jdbc.Driver");// 声明数据库view的URLString url = "jdbc:mysql://localhost:3306/view?useUnicode=true&characterEncoding=utf-8&useSSL=false";// 数据库用户名String user = "root"; // 数据库密码String password = "123456"; // 建立数据库连接,获得连接对象connConnection conn = DriverManager.getConnection(url, user, password);String name="Jacck";String sql = String.format("insert into student(username) values('%s')",name); // 生成一条sql语句// 创建一个Statment对象PreparedStatement ps = conn.prepareStatement(sql);// 执行sql语句ps.executeUpdate();

假设我们已经建好了一个数据库,我们创建了一个student表,那么我们上面的语句就是插入了一条语句。

那么SQL注入又是怎么一回事呢?我们尝试再插入一条恶意数据,数据内容就是漫画中的"Robert');DROP TABLE students;--",看看会发生什么情况。

我们执行完代码后,你会发现并没有任何结果显示:

你将会发现,运行后,程序没有输出任何数据内容,而是返回一条错误信息:表单students无法找到!

这是为什么呢?问题就在于我们所插入的数据项中包含SQL关键字DROP TABLE,这两个关键字的意义是从数据库中清除一个表单。

而关键字之前的Robert');使得SQL执行器认为上一命令已经结束,从而使得危险指令DROP TABLE得到执行。

也就是说,这段包含DROP TABLE关键字的数据项使得原有的简单的插入姓名信息的SQL语句:

INSERT INTO students (username) VALUES ('Robert')

变为了同时包含另外一条清除表单命令的语句:

INSERT INTO students (username) VALUES ('Robert');DROP TABLE students;

而SQL数据库执行上述操作后,students表单被清除,因而表单无法找到,所有数据项丢失。

这里我们举一个比较常见的例子来简要说明一下sql注入的原理。假如我们有一个users表,里面有两个字段username和password。在我们的java代码中我们初学者都习惯用sql拼接的方式进行用户验证。比如:"select id from users where username = '"+username +"' and password = '"  + password +"'" 这里的username和password都是我们存取从web表单获得的数据。下面我们来看一下一种简单的注入,如果我们在表单中username的输入框中输入' or 1=1-- ,password的表单中随便输入一些东西,假如这里输入123.此时我们所要执行的sql语句就变成了select id from users where username = '' or 1=1--  and password = '123',我们来看一下这个sql,因为1=1是true,后面 and password = '123'被注释掉了。所以这里完全跳过了sql验证。

以上就是SQL注入的解释了。

大白话讲解SQL注入相关推荐

  1. 实例讲解SQL注入攻击

    转载地址:http://www.csdn.net/article/2015-01-13/2823533-SQL allowtransparency="true" framebord ...

  2. sql注入新手入门 从实战讲解SQL注入(手动注入+MySQL+靶场源码)

    资源放在下面,自取 https://blog.csdn.net/qq_45514735?spm=1011.2266.3001.5343 1.我们首先用小皮面板和sqli-labs靶场源码搭建一个环境 ...

  3. golang避免SQL注入

    QL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞.可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取 ...

  4. 网络安全--SQL注入介绍

    课程目标:讲解SQL注入的原理.特点.危害,SQL注入的攻击手法和MySQL注入的常用函数,讲解相关工具,如何去防御SQL注入. 任务目标:了解SQL注入相关概念,掌握SQL注入攻击手法,了解SQL注 ...

  5. tp中如何防止mysql注入_thinkphp如何防止sql注入xss攻击

    SQL注入简介 SQL 注入漏洞(SQL Injection)是 Web 开发中最常见的一种安全漏洞.可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有 ...

  6. SQL注入教程——(三)简单的注入尝试

    本文将以简单的SQL注入实例来讲解SQL注入的基本思路与流程,当然本文实例只是注入的一种情况,初学者应重点理解思路,学会举一反三. GET与POST 进行SQL注入攻击,大家还需要了解两种基本的 HT ...

  7. mysql sql注入很常用_常见sql注入的类型

    这里只讲解sql注入漏洞的基本类型,代码分析将放在另外一篇帖子讲解 目录 最基础的注入-union注入攻击 Boolean注入攻击-布尔盲注 报错注入攻击 时间注入攻击-时间盲注 堆叠查询注入攻击 二 ...

  8. 手动SQL注入(盲注)讲解

    由于很多人(特别是针对初学者)在百度查找相关的SQL盲注的文章时总感觉无法得到一篇很基础,很完整的文章,所以在这里讲解一篇完整的SQL注入文章 1 查找源码之家等网站进行下载一个网站, 在这里我下载的 ...

  9. SQL注入详细步骤讲解

    SQL注入详细步骤讲解 1.Get型 整型与字符型注入判断: 举例: http://xxx/xxx/Less-1/?id=1 and 1=1 --+ 输入?id=1 and 1=1 --+正常,输入? ...

最新文章

  1. R 语言排名破纪录,一不小心把 PHP 比下去了 | 7月编程语言排行
  2. 移动端实现文字轮播_使用原生JS实现移动端图片轮播效果(一)
  3. DOS下查看局域网的ip使用情况,以及ip对应的主机名
  4. 【工具】ubuntu下在百度云文件
  5. centos8安装mongodb5
  6. 【数据结构与算法】之深入解析“重新安排行程”的求解思路与算法示例
  7. android手机定位
  8. WP SyntaxHighlighter 初探
  9. 在ASP.NET 3.5中使用新的ListView控件1
  10. 最简单的目标跟踪(模版匹配)
  11. Spring MVC处理响应的 header
  12. 不再以讹传讹,GET和POST的真正区别(转)
  13. spss假设检验_SPSS有序Logistic回归的具体操作——「杏花开生物医药统计」
  14. Python黑客帝国装逼代码
  15. 【报告分享】 2020年中国汽车用户消费洞察白皮-懂车帝巨量算数(附下载)
  16. 墙绘装饰设计公司网站织梦模板免费下载
  17. 这儿有你所需要的所有关于科研的网址
  18. 有什么文字转语音软件?这几个软件你不能不知道
  19. google android 系统介绍
  20. 【学习OpenCV4】漫水填充算法使用总结

热门文章

  1. realme首发天玑720,与小米在性价比手机市场展开争夺
  2. Java集合类之Map接口之学生花名册
  3. Android微信界面的制作
  4. Java SpringBoot 获取项目路径
  5. GUI实验—制作电子相册
  6. python 打印 字符串 上标 下标
  7. 3d打印是否能普遍自制产品
  8. 如何在Microsoft Word中添加一个悬挂缩进
  9. 电脑上安装过Node版本低,要升级,卸掉重新装?不不不,看这里
  10. 【Hackintosh】对于帕斯卡构架的显卡不能成功驱动补丁可能出现的SIP状态异常问题以及解决办法