大白话讲解SQL注入
先看一副有趣的漫画
这幅画就是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注入相关推荐
- 实例讲解SQL注入攻击
转载地址:http://www.csdn.net/article/2015-01-13/2823533-SQL allowtransparency="true" framebord ...
- sql注入新手入门 从实战讲解SQL注入(手动注入+MySQL+靶场源码)
资源放在下面,自取 https://blog.csdn.net/qq_45514735?spm=1011.2266.3001.5343 1.我们首先用小皮面板和sqli-labs靶场源码搭建一个环境 ...
- golang避免SQL注入
QL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞.可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取 ...
- 网络安全--SQL注入介绍
课程目标:讲解SQL注入的原理.特点.危害,SQL注入的攻击手法和MySQL注入的常用函数,讲解相关工具,如何去防御SQL注入. 任务目标:了解SQL注入相关概念,掌握SQL注入攻击手法,了解SQL注 ...
- tp中如何防止mysql注入_thinkphp如何防止sql注入xss攻击
SQL注入简介 SQL 注入漏洞(SQL Injection)是 Web 开发中最常见的一种安全漏洞.可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有 ...
- SQL注入教程——(三)简单的注入尝试
本文将以简单的SQL注入实例来讲解SQL注入的基本思路与流程,当然本文实例只是注入的一种情况,初学者应重点理解思路,学会举一反三. GET与POST 进行SQL注入攻击,大家还需要了解两种基本的 HT ...
- mysql sql注入很常用_常见sql注入的类型
这里只讲解sql注入漏洞的基本类型,代码分析将放在另外一篇帖子讲解 目录 最基础的注入-union注入攻击 Boolean注入攻击-布尔盲注 报错注入攻击 时间注入攻击-时间盲注 堆叠查询注入攻击 二 ...
- 手动SQL注入(盲注)讲解
由于很多人(特别是针对初学者)在百度查找相关的SQL盲注的文章时总感觉无法得到一篇很基础,很完整的文章,所以在这里讲解一篇完整的SQL注入文章 1 查找源码之家等网站进行下载一个网站, 在这里我下载的 ...
- SQL注入详细步骤讲解
SQL注入详细步骤讲解 1.Get型 整型与字符型注入判断: 举例: http://xxx/xxx/Less-1/?id=1 and 1=1 --+ 输入?id=1 and 1=1 --+正常,输入? ...
最新文章
- R 语言排名破纪录,一不小心把 PHP 比下去了 | 7月编程语言排行
- 移动端实现文字轮播_使用原生JS实现移动端图片轮播效果(一)
- DOS下查看局域网的ip使用情况,以及ip对应的主机名
- 【工具】ubuntu下在百度云文件
- centos8安装mongodb5
- 【数据结构与算法】之深入解析“重新安排行程”的求解思路与算法示例
- android手机定位
- WP SyntaxHighlighter 初探
- 在ASP.NET 3.5中使用新的ListView控件1
- 最简单的目标跟踪(模版匹配)
- Spring MVC处理响应的 header
- 不再以讹传讹,GET和POST的真正区别(转)
- spss假设检验_SPSS有序Logistic回归的具体操作——「杏花开生物医药统计」
- Python黑客帝国装逼代码
- 【报告分享】 2020年中国汽车用户消费洞察白皮-懂车帝巨量算数(附下载)
- 墙绘装饰设计公司网站织梦模板免费下载
- 这儿有你所需要的所有关于科研的网址
- 有什么文字转语音软件?这几个软件你不能不知道
- google android 系统介绍
- 【学习OpenCV4】漫水填充算法使用总结