当前位置: 首页 > article >正文

MYSQL中的两种转义操作

在 MySQL 中,转义字符用于处理特殊字符,以防止语法错误或 SQL 注入攻击,而单双引号都是需要重点注意的字符

可以用转义符\  和 两个连续的引号 来起到转义引号的作用

转义符转义:

这是users表中的数据

5f285bd409b742f6966f08849af61454.png

如果查询admin' 或者 admin" 用户,可以用转义符\ 

c5ac47d3c98d4a309aac79d753552999.png

 两个连续的引号转义:

可以用两个连续的单引号完成转义单引号操作

aa4ed0493ca84ca98d1f25b9d57275ed.png

又或者

2a5a75e3cf5046a8a2b3d7b6de651c94.png

可以看到语句正常执行并且中间的四个单引号被转义成两个单引号

如果不连续,就会报错

ed747ad33e6844159929b5b84e560b07.png

 其中第二条命令在两个单引号之后插入了1 语句没有报错,只是没有查询到 admin'1  这个用户名

第三条命令报错信息为near '1''' at line 1 

也就是认为'admin'是正常的字符串,而后面的 1'' 格式不对从而导致报错

SQL注入中的演示:

以sqli-labs 第11关为例: 这一关是输入框

82533c2de53c4be588f9a58f00f264b5.png

代码中的查询语句:

@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

可以看到是用单引号包围了$uname 和 $passwd 参数,这题是有报错信息回显的

用户名输入admin\ 密码输入 123   会报错 near '123' LIMIT 0,1' at line 1

42beef215e66485fba91a7baf20e1aa9.png
是因为转义符转义了单引号变成 

where username='admin\' and password='123' LIMIT 0,1";  

单引号中的内容匹配的是  admin\' and password=   后面的123' 是格式错误的,所以报错信息是123'

不输入密码 只输入 admin\    会回显

3466732d46424a51bde475c7949098c4.png

报错信息变成了从 admin 开始

输入 admin' 来测试 不输入密码  回显报错  near ''admin'' and password='' LIMIT 0,1' at line 1    

5f72d5b642ee4732b57719f5e9e4c224.png
如果输入密码例如123  那么报错信息就变成  near '123' LIMIT 0,1' at line 1  

b8ff778be7b54abdad1fc28c0bee377a.png
这时错误信息是123' 而不是从admin开始到最后
    
在mysql中 两个连续的单引号表示转义,即'' 表示一个转义过的'

那么前面输入 admin'/123      '' 转义变成'

select username, password from users where username='admin'' and password='123' LIMIT 0,1;

admin'' and password= 被识别为username单引号中的内容  所以出错位置是123'
不输入密码  变成 where username='admin'' and password=''  
按照上面应该是'admin'' and password=' 被识别为字符串内容,那么报错信息应该从最后的单引号'开始
很明显不是,猜测是因为最后的password='' 两个连续的单引号也被转义成了一个字面上的单引号,导致最后没有能够匹配最开始的单引号,不能正常闭合整个字符串,所以报错信息是从admin开始的

输入密码之后隔开了两个单引号,不连续所以没被转义,前面正常,只有后面报错


http://www.kler.cn/a/389122.html

相关文章:

  • 2411C++,C++26反射示例
  • Spring框架之观察者模式 (Observer Pattern)
  • 网络远程操控
  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • 人脸识别技术:从算法到深度学习的全面解析
  • 10款PDF翻译工具的探索之旅:我的使用经历与工具特色!!
  • Linux_调试器-gdb/cgdb的使用
  • 境内部署DIfy(上篇)
  • 软件工程中的创建型设计模式:工厂方法模式与抽象工厂模式
  • Java抽象类与接口
  • openresty入门教程:init_by_lua_block
  • ctfshow web入门黑盒测试web380-384
  • 每周算法2:数学+模拟+哈希表+栈+线性dp+贪心(简单)
  • 两个链表求并集、交集、差集
  • 微信小程序开发(二)登录流程
  • CMAKE 编译CUDA项目失败 “/usr/bin/nvcc“ is not able to compile a simple test program.
  • 通义千问API调用测试 (colab-python,vue)
  • 【机器学习】数学知识:指数
  • Android 延时操作的常用方法
  • Linux软件包管理
  • 分布式——BASE理论
  • 【harbor】离线安装2.9.0-arm64架构服务制作和升级部署
  • Java:JVM
  • 解决:使用EasyExcel导入Excel模板时出现数据导入不进去的问题
  • React前端框架:现代网页开发的基石(附带构建简单任务管理应用案例代码)
  • 栈(Stack)和队列(Deque、Queue)