mybatis - 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是正确的命令)
综上,若满足前提条件,是否第二条sql才是真正意义上的sql注入?
根据提供的信息,在配置中 allowMultiQueries 被设置为 false,所以当注入语句中包含多条 SQL 语句时,会产生异常。
而第一条SQL语句所导致的结果是,查询操作被破坏,但是数据库没有被损坏或数据没有被更改,这不是传统意义上的 SQL 注入攻击。
而第二条SQL语句所导致的结果是,数据库表被删除,这是一种传统意义上的 SQL 注入攻击。
所以第二条sql才是真正意义上的SQL注入。
需要提醒的是,即使在 allowMultiQueries 设置为 false 的情况下,使用字符串拼接的方式构建 SQL 语句仍然是不安全的,建议使用参数化的方式来防止SQL注入。
仅供参考,望采纳,谢谢。
sql注入本质上就是文本框里的内容直接被拼接进sql造成的
即使你不允许执行多条sql,攻击者还可以靠拼接非法字符(比如不成对的单引号)让你的页面抛异常来捕获数据结构,拼接一个异常复杂的嵌套语句实现对系统表进行查询,删除表,定义存储过程等一系列手段对数据库进行操作
所以防注入还要从根本入手,就是参数化查询,不管文本框里输入了什么,它是以数据的方式提交而不是语句的方式提交