zoukankan      html  css  js  c++  java
  • 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 t_bchw(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个参数

  • 相关阅读:
    创建数据库,用户,表
    Tomcat安装配置
    常用JS
    win8以管理员身份安装软件
    mybatis中@Param用法
    springMVC3
    SpringMVC参数绑定
    SpringMVC2
    查询数据库元数据
    mybatis 中 foreach collection的三种用法
  • 原文地址:https://www.cnblogs.com/workharder/p/15517871.html
Copyright © 2011-2022 走看看