SQL注入攻击 - MyBatis

  MyBatis是一款半ORM(对象关系映射)框架,它允许开发者通过简单的XML或注解配置,将原生SQL、存储过程以及高级映射映射到Java对象(POJO)。MyBatis的设计目标是简化数据库操作,避免了几乎所有的JDBC代码和手动设置参数,使得数据持久化操作更加直观和便捷

   #{}: 用于参数的预处理,能够安全地传递参数,并支持JDBC类型的指定
   ${}: 用于静态SQL片段的替换,比如表名、列名等动态确定的部分

安全代码:原生代码

  • 增加
  • 删除
  • 修改
  • 查询
测试结果

                                        

安全代码

安全代码:自定义方法

  • 增加
  • 删除
  • 修改
  • 查询
测试结果

                                        

安全代码

特殊场景:Order By下的安全问题

  • ${}拼接问题
  • #{}写法
  • 白名单

可选排序字段 id、username、password

预编译下 ordery by排序失效 使用默认排序

测试结果

                                        

缺陷代码

特殊场景:使用%和模糊查询-like

  • 拼接注入
  • 预编译写法
测试结果

                                        

相关代码

特殊场景:in后的参数问题

  • ${}
  • #[]
  • Foreach
测试结果

                                        

相关代码