qq_43304875 2023-01-11 15:39 采纳率: 40%
浏览 20
已结题

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%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

3条回答 默认 最新

  • |__WhoAmI__| 2023-01-11 15:46
    关注

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

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

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月19日
  • 已采纳回答 1月11日
  • 创建了问题 1月11日