mybatis - sql注入疑惑

问题遇到的现象和发生背景

mybatis - sql注入疑惑

依赖:

  1. springboot
  2. mybatis
    遇到的现象和发生背景,请写出第一个错误信息
  3. select * from test_sql ${sql}
  4. ${sql}

若满足以下前提条件的情况下,是否只有第二条sql才是真正意义上的sql注入?
1.配置文件的数据库连接url保证allowMutiQueries=false(即一条语句内不可以执行多条sql语句)
2.可以容忍表test_sql的全量查询

题主在满足上述前提条件的情况下对第一条sql进行注入,使其变成了如下sql
(1)select * from test_sql; truncate test_sql
(2)select * from test_sql; truncate test_sql;

执行出现如下报错:(题主爆炸注入形成的sql是正确的命令)

img

综上,若满足前提条件,是否第二条sql才是真正意义上的sql注入?

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

根据提供的信息,在配置中 allowMultiQueries 被设置为 false,所以当注入语句中包含多条 SQL 语句时,会产生异常。

而第一条SQL语句所导致的结果是,查询操作被破坏,但是数据库没有被损坏或数据没有被更改,这不是传统意义上的 SQL 注入攻击。

而第二条SQL语句所导致的结果是,数据库表被删除,这是一种传统意义上的 SQL 注入攻击。

所以第二条sql才是真正意义上的SQL注入。

需要提醒的是,即使在 allowMultiQueries 设置为 false 的情况下,使用字符串拼接的方式构建 SQL 语句仍然是不安全的,建议使用参数化的方式来防止SQL注入。

仅供参考,望采纳,谢谢。

sql注入本质上就是文本框里的内容直接被拼接进sql造成的
即使你不允许执行多条sql,攻击者还可以靠拼接非法字符(比如不成对的单引号)让你的页面抛异常来捕获数据结构,拼接一个异常复杂的嵌套语句实现对系统表进行查询,删除表,定义存储过程等一系列手段对数据库进行操作
所以防注入还要从根本入手,就是参数化查询,不管文本框里输入了什么,它是以数据的方式提交而不是语句的方式提交