SQL注入的基础

介绍SQL注入

SQL注入就是指web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带人数据库查询,攻击者可以通过构造不同的

SQL语句来实现对数据库的任意操作。

一般情况下,开发人员可以使用动态SQL语句创建用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL语句。当开发人员在

运行过程中需要根据不同的查询标准决定提取什么字段(如select语句),或者根据不同的条件选择不同的查询表时,动态地构造SQL语句会非常有用。

下面以PHP语句为例

$query = "SELECT * FROM users WHERE id = $_GET['id']";

由于这里参数ID可控,且带人数据库查询,所以非法用户可以任意拼接SQL语句进行攻击。

当然,SQL注入按照不同的分类方法可以分为很多种,如报错注入、盲注入、Union注入等。

SQL注入的原理

SQL注入漏洞的产生需要满足以下两个条件。

参数用户可控:前端传给后端的参数内容是用户可以控制的。

参数带人数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

当传入的ID参数为1'时,数据库执行的代码如下。

selwct * from users where id = 1'

这不符合数据库语法规范,所以会报错。当传入的ID参数为and 1=1时,执行的SQL语句如下。

selwct * from users where id = 1 and 1=1

因为1=1为真,且where语句中id=1也为真,所以页面会返回与id=1相同的结果。当传入的ID参数存在SQL注入漏洞,攻击者可以进一步拼接SQL语句进行攻击,

致使数据库信息泄露,进一步获取服务器权限等。

在实际环境中,凡是满足上述两个条件的参数可能存在SQL注入漏洞。

与MySQL注入相关的知识点

在详细介绍SQL注入漏洞前,先说下MySQL中与SQL注入漏洞相关的知识点。

在MySQL 5.0版本之后,MySQL默认在数据库中存放一个“information_schema”的数据库,在该库中,读者需要记住三个表名,分别是SCHEMATA、TABLES和COLUMNS。

SCHEMATA表存储该用户创建的所有数据库的库名。我们需要记住该表中记录数据库库名的字段名为SCHEMA_NAME。

TABLES表存储该用户创建的所有数据库的库名和表名。我们需要记住该表中记录数据库库名和表名的字段名分别为TABLE_SCHEMA和TABLE_NAME。

COLUMNS表存储该用户创建的所有数据库的库名、表名和字段名。我们需要记住该表中记录数据库库名、表名和字段名的字段名为TABLE_SCHEMA、TABLE_NAME和COLUMN_NAME。

1.MySQL查询语句

在不知道任何条件时,语句如下。

SELECT 要查询的字段名 FROM 库名.表名

在知道一条已知条件时,语句如下。

SELECT 要查询的字段名 FROM 库名.表名 WHERE 已知条件的字段名='已知条件的值'

在知道两条已知条件时,语句如下。

SELECT 要查询的字段名 FROM 库名.表名 WHERE 已知条件1的字段名='已知条件1的值' AND 已知条件2的字段名='已知条件2的值'

2.limit的用法

limit的使用格式为limit m,n,其中m是指记录开始的位置,从0开始,表示第一条记录;n是指取n条记录。例如limit 0,1表示从第一条记录开始,取一条

记录,不使用limit和使用limit查询。

3.需要记住的几个函数

database():当前网站使用的数据库。

version():当前MySQL的版本。

user():当前MySQL的用户。

4.注释符

在MySQL中,常见注释符的表达方式:#或--空格或/**/。

5.内联注释

内联注释的形式:/*! code */。内联注释可以用于整个SQL语句中,用来执行我们的SQL语句,下面举例。

index.php?id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3

mysql数据库sql注入原理_如何SQL注入的原理和SQL注入的基础相关推荐

  1. Mysql数据库存储的原理

    Mysql数据库存储的原理 Mysql储存过程简介 Mysql数据库存储的优点 1.存储过程能实现较快的执行速度. 2.存储过程允许标准组件是编程. 3.存储过程可以用流控制语句编写,有很强的灵活性, ...

  2. mysql数据库访问300ms以上_[Java教程]一张900w的数据表,16s执行的SQL优化到300ms?...

    [Java教程]一张900w的数据表,16s执行的SQL优化到300ms? 0 2020-11-20 16:00:16 一,前言 证实 有一张财务流水表,未分库分表,目前的数据量为9555695,分页 ...

  3. 阿里P8架构师谈:MySQL数据库的索引原理、与慢SQL优化的5大原则

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修 ...

  4. MySQL数据库性能优化由浅入深(表设计、慢查询、SQL索引优化、Explain分析、Show Profile分析、配置优化)

    文章目录 0 SQL性能分析 1 表的设计合理化 1.1 为什么需要范式 1.2 三范式原理 1.3 什么样的表才满足三范式 2 慢查询 2.1 慢查询介绍 2.2 慢查询步骤 3 添加适当索引 3. ...

  5. AB的Plc读写mysql数据库_Rockwell罗克韦尔(AB)PLC的数据存入SQL数据库,快速实现设备数据采集...

    通过数据库网关连接罗克韦尔1756-L72的以太网端口标签方式采集数据,将数据存入MySQL数据库,以下描述具体的操作步骤.PLC数据MQTT多主题发布/订阅西门子PLC数据采集到数据库 网关模块安装 ...

  6. mysql数据库访问控制_一文总结MySQL数据库访问控制实现原理

    MySQL 访问控制实际上由两个功能模块共同组成,一个是负责"看守 MySQL 大门"的用户管理模块,另一个就是负责监控来访者每一个动作的访问控制模块.用户管理模块决定用户是否能登 ...

  7. mysql数据库资源池是否耗尽_高性能数据库连接池的内幕

    何涛 唯品会平台架构师 何涛,现任职于唯品会平台架构部,要负责数据访问层,网关,数据库中间件,平台框架等开发设计工作.在数据库性能优化,架构设计等方面有着大量的经验积累.热衷于高可用,高并发及高性能的 ...

  8. mysql数据库ACID实现原理

    说到事物的四大特性原子性.一致性.隔离性.持久性,懂的人很多,但是稍微涉及细节,四大特性在数据库中的实现原理是怎么实现的?几乎很少有人能够答上来.所以这里着重讨论下mysql中的实现原理. 问题一:M ...

  9. mysql驱动加载原理_老调重弹:JDBC系列 之 lt;驱动载入原理全面解析gt;

    前言 近期在研究Mybatis框架,因为该框架基于JDBC.想要非常好地理解和学习Mybatis,必需要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来.好好总结一番,作为自己的笔记,也是给 ...

  10. 与mysql数据库的交互实战_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...

    在这篇教程中,我们将在 MySQL 中创建一个 chitchat 数据库作为论坛项目的数据库,然后在 Go 项目中编写模型类与之进行交互.你可以本地安装 MySQL 数据库,也可以基于 Docker ...

最新文章

  1. 《C#精彩实例教程》小组阅读10 -- C#属性与方法
  2. Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 ISAPI CGI
  3. swift与OC之间不得不知道的21点
  4. windows桌面待办事项_想在手机桌面上安装一个便利贴,下载什么便签软件好?
  5. ES5-拓展 箭头函数的this、this的优先级
  6. 多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)
  7. Java数据类型,Hibernate数据类型,标准sql数据类型之间的对应表
  8. springmvc form中 commandName和modelAttribute的疑问
  9. androidtabhost缓存_Android TabHost用法详解
  10. 苹果电池显示维修_iFixit拆解苹果iPhone 12/Pro:显示屏和电池可互换
  11. 云社区博客博客详情火瞳智慧通行助力疫情防控及安全出行
  12. 概率论复习笔记【3条件概率】
  13. 含文档+PPT+源码等]精品基于SSM的图书管理系统[包运行成功]
  14. c语言把一个英语短句倒装,高中英语倒装句(我的恩师整理)(6页)-原创力文档...
  15. 福利 | Hadoop权威指南(中文)第四版
  16. PyTorch深度学习实践 Lecture09 Softmax 分类器
  17. 锁相放大器基础结构原理介绍
  18. linux alignment总结
  19. QQ机器人,涩图美图风景图发送,聚合点歌,砍公会战管理,简单对话聊天
  20. linux系统怎么远程重启,远程重启linux主机的几种方法

热门文章

  1. TypeScript实战:下棋游戏
  2. Javascript:Ajax案例实操
  3. Twitter数据抓取的方法(三)
  4. karto探秘之open_karto 第三章 --- 扫描匹配
  5. Java:对于Borderlayout布局管理的理解
  6. 哈希函数的构造方法以及哈希表解决冲突的方式
  7. opencv中的图像拼接
  8. [51nod1232]完美数
  9. 关于信息安全工作方法论的一点猜想
  10. 冒泡排序(数组排序不用Array.Sort)