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-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南
- 2024-10-22MySQL数据库入门教程:从安装到基本操作
- 2024-10-22MySQL读写分离入门教程:轻松实现数据库性能提升
- 2024-10-22MySQL分库分表入门教程
- 2024-10-22MySQL慢查询的诊断与优化指南
- 2024-10-22MySQL索引入门教程:快速理解与应用指南
- 2024-10-22MySQL基础入门教程:从安装到基本操作
- 2024-10-22MySQL数据库中的Binlog详解与操作教程
- 2024-10-12部署MySQL集群项目实战:新手入门教程