mysql数据库sql注入原理_如何SQL注入的原理和SQL注入的基础
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注入的基础相关推荐
- Mysql数据库存储的原理
Mysql数据库存储的原理 Mysql储存过程简介 Mysql数据库存储的优点 1.存储过程能实现较快的执行速度. 2.存储过程允许标准组件是编程. 3.存储过程可以用流控制语句编写,有很强的灵活性, ...
- mysql数据库访问300ms以上_[Java教程]一张900w的数据表,16s执行的SQL优化到300ms?...
[Java教程]一张900w的数据表,16s执行的SQL优化到300ms? 0 2020-11-20 16:00:16 一,前言 证实 有一张财务流水表,未分库分表,目前的数据量为9555695,分页 ...
- 阿里P8架构师谈:MySQL数据库的索引原理、与慢SQL优化的5大原则
MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修 ...
- MySQL数据库性能优化由浅入深(表设计、慢查询、SQL索引优化、Explain分析、Show Profile分析、配置优化)
文章目录 0 SQL性能分析 1 表的设计合理化 1.1 为什么需要范式 1.2 三范式原理 1.3 什么样的表才满足三范式 2 慢查询 2.1 慢查询介绍 2.2 慢查询步骤 3 添加适当索引 3. ...
- AB的Plc读写mysql数据库_Rockwell罗克韦尔(AB)PLC的数据存入SQL数据库,快速实现设备数据采集...
通过数据库网关连接罗克韦尔1756-L72的以太网端口标签方式采集数据,将数据存入MySQL数据库,以下描述具体的操作步骤.PLC数据MQTT多主题发布/订阅西门子PLC数据采集到数据库 网关模块安装 ...
- mysql数据库访问控制_一文总结MySQL数据库访问控制实现原理
MySQL 访问控制实际上由两个功能模块共同组成,一个是负责"看守 MySQL 大门"的用户管理模块,另一个就是负责监控来访者每一个动作的访问控制模块.用户管理模块决定用户是否能登 ...
- mysql数据库资源池是否耗尽_高性能数据库连接池的内幕
何涛 唯品会平台架构师 何涛,现任职于唯品会平台架构部,要负责数据访问层,网关,数据库中间件,平台框架等开发设计工作.在数据库性能优化,架构设计等方面有着大量的经验积累.热衷于高可用,高并发及高性能的 ...
- mysql数据库ACID实现原理
说到事物的四大特性原子性.一致性.隔离性.持久性,懂的人很多,但是稍微涉及细节,四大特性在数据库中的实现原理是怎么实现的?几乎很少有人能够答上来.所以这里着重讨论下mysql中的实现原理. 问题一:M ...
- mysql驱动加载原理_老调重弹:JDBC系列 之 lt;驱动载入原理全面解析gt;
前言 近期在研究Mybatis框架,因为该框架基于JDBC.想要非常好地理解和学习Mybatis,必需要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来.好好总结一番,作为自己的笔记,也是给 ...
- 与mysql数据库的交互实战_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
在这篇教程中,我们将在 MySQL 中创建一个 chitchat 数据库作为论坛项目的数据库,然后在 Go 项目中编写模型类与之进行交互.你可以本地安装 MySQL 数据库,也可以基于 Docker ...
最新文章
- 《C#精彩实例教程》小组阅读10 -- C#属性与方法
- Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 ISAPI CGI
- swift与OC之间不得不知道的21点
- windows桌面待办事项_想在手机桌面上安装一个便利贴,下载什么便签软件好?
- ES5-拓展 箭头函数的this、this的优先级
- 多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)
- Java数据类型,Hibernate数据类型,标准sql数据类型之间的对应表
- springmvc form中 commandName和modelAttribute的疑问
- androidtabhost缓存_Android TabHost用法详解
- 苹果电池显示维修_iFixit拆解苹果iPhone 12/Pro:显示屏和电池可互换
- 云社区博客博客详情火瞳智慧通行助力疫情防控及安全出行
- 概率论复习笔记【3条件概率】
- 含文档+PPT+源码等]精品基于SSM的图书管理系统[包运行成功]
- c语言把一个英语短句倒装,高中英语倒装句(我的恩师整理)(6页)-原创力文档...
- 福利 | Hadoop权威指南(中文)第四版
- PyTorch深度学习实践 Lecture09 Softmax 分类器
- 锁相放大器基础结构原理介绍
- linux alignment总结
- QQ机器人,涩图美图风景图发送,聚合点歌,砍公会战管理,简单对话聊天
- linux系统怎么远程重启,远程重启linux主机的几种方法