MySql教程

mysql prepare为什么可以防注入

本文主要是介绍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为什么可以防注入的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!