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个参数

  • 相关阅读:
    架构师图谱
    P3398 仓鼠找sugar
    NOIP 2017小凯的疑惑
    P2568 GCD
    自动AC机
    qbxt国庆刷题班 游记&总结
    【学习笔记】manacher算法
    [ZROI]分组
    BSGS与扩展BSGS
    Crt and ExCrt
  • 原文地址:https://www.cnblogs.com/workharder/p/15517871.html
Copyright © 2011-2022 走看看