mysql prepare为什么可以防注入
2021/11/6 19:10:00
本文主要是介绍mysql prepare为什么可以防注入,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
先说原因:PreparedStatement 预编译,再填充参数的,就算参数是字符串拼接的方式,也会把整体当成1个参数,不再进行语法语义等分析。
测试例子1:
1 创建存储过程如下: 2 drop procedure if exists `insert_test`; 3 delimiter && 4 create procedure `insert_test`(in pdatas mediumblob) 5 begin 6 declare stmt mediumblob default ''; 7 start transaction; 8 9 set @a = pdatas; 10 set @sqlstr = ''insert into test(name, level) value (?,1); 11 prepare stmt from @sqlstr; 12 execute stmt using @a; 13 deallocate prepare stmt; 14 15 commit; 16 end 17 &&
执行注入语句:
1 call insert_test("aa,1),(bb,");
如果能注入,则产生2条数据,而结果是一行数据:
name:aa,1),(bb,
level:1
说明,就算字符串以拼接的方式执行,还是会把字符串整体,当成1个参数
这篇关于mysql prepare为什么可以防注入的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29阿里 Canal 实时同步 MySQL 增量数据至 ClickHouse 数据库
- 2024-05-24在Linux下管理MySQL的大小写敏感性
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7