Kevin's blog Kevin's blog
首页
  • Java基础
  • Java高级
  • MySQL
  • JDBC
  • Java 8新特性
  • 原生Servlet
  • 延迟队列
  • 分布式事务
  • ActiveMQ
  • Elasticsearch
  • Stream API
  • Redis 实战(黑马程序员)
  • Redis 课程(尚硅谷)
  • Redis数据类型和常用命令
  • 版本控制
  • Spring Framework
  • Spring MVC Framework
  • MyBatis Framework
  • MyBatis Plus Framework
  • Spring Boot Framework
  • 韩顺平 Spring Boot Framework
  • 在线教育
  • 谷粒商城 - 分布式基础 高级 集群
  • 谷粒商城 - 详细开发文档
  • docker基础
  • docker-compose容器编排
  • docker swarm集群管理
  • Vue2基础
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Kevin

Java系统笔记
首页
  • Java基础
  • Java高级
  • MySQL
  • JDBC
  • Java 8新特性
  • 原生Servlet
  • 延迟队列
  • 分布式事务
  • ActiveMQ
  • Elasticsearch
  • Stream API
  • Redis 实战(黑马程序员)
  • Redis 课程(尚硅谷)
  • Redis数据类型和常用命令
  • 版本控制
  • Spring Framework
  • Spring MVC Framework
  • MyBatis Framework
  • MyBatis Plus Framework
  • Spring Boot Framework
  • 韩顺平 Spring Boot Framework
  • 在线教育
  • 谷粒商城 - 分布式基础 高级 集群
  • 谷粒商城 - 详细开发文档
  • docker基础
  • docker-compose容器编排
  • docker swarm集群管理
  • Vue2基础
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Spring Framework

  • Sprng MVC Framework

  • Mybatis

  • Mybatis Plus

    • MyBatis-Plus
    • 指南

      • 快速入门

      • 核心功能

        • 代码生成器(新)
        • 代码生成器(旧)
        • CRUD 接口
        • 条件构造器
        • 主键策略
        • 自定义ID生成器
        • 安全漏洞避免说明
      • 扩展

      • 插件

    • 配置

    • 生态

    • 问答

    • 支持

    • 低代码平台

  • Spring Boot

  • Spring Cloud

安全漏洞避免说明

提示

如何编写安全的代码,什么是漏洞?

常见漏洞 软件编写存在bug 设计存在缺陷 探讨这个问题前我们来先定义 ORM 框架的漏洞,作为 ORM 框架它的职责是负责执行 SQL 操作数据, 那么 SQL注入 就是主要漏洞点,什么情况下会引起SQL注入呢?也就是执行SQL参数脱离预编译允许拼接 SQL片段 的时候。

  • 表字段部分

对于固定字段部分,有些系统为了灵活使用动态字段,这种情况需要系统设计者开发人员自己控制保证字段的安全性, 绝对不能允许 前端任意传入 字符串拼接,如果有这种需求也是需要有字段映射判断逻辑的。

  • 字段变量部分

这部分通常ORM框架都是有做 预编译防止SQL注入 逻辑处理,如果存在 允许恶意拼接SQL 我们可以认定为 SQL注入漏洞 通常 框架也会明确告知风险,比如 MyBatis 占位符 $ 是存在注入风险的 使用者需要自行控制安全,尽量使用 占位符 # 规避风险。

# 防止 SQL 注入

使用 MP 提供的工具类 SqlInjectionUtils.check(内容) 验证字符串是否存在 SQL 注入 存在抛出异常, 注意!!最好是不允许任何 SQL片段 由前端传到后台,如果你要嘴硬那么请您直接让前端操作数据库,不要使用任何 ORM 框架!!

  • SQL 注入安全保护说明
Wrappers.query()
// 开启自动检查 SQL 注入 (3.5.3.2+ 版本支持,强烈建议前端不能传入SQL片段,无法避免必须验证合法性)
.checkSqlInjection().orderByDesc("任意前端传入字段")
​
// 手动校验方式
SqlInjectionUtils.check("任意前端传入字段")
1
2
3
4
5
6

# 被恶意认定为漏洞的说明

吐槽一下! 真正的漏洞我们是很虚心的改正,但是这些如此低级的错误,还好意思发到网上?

您这不是编码能力有限,那就是坏。

  • MybatisPlus <= 3.5.3.1 TenantPlugin 租户组件 存在 sql 注入漏洞

CVE-2023-25330 (opens new window)

该“漏洞”提交者恶意暴露 表字段部分 使前端可任意传入,硬要说是漏洞也是 软件编写存在bug 底层框架是无法约束 使用者传入什么字段的,这种情况 软件开发者 需要做映射字段逻辑判断。

  • SQL 注入漏洞 CVE-2022-25517

CVE-2022-25517 (opens new window)

原漏洞仓库已经被删除,点击详情分析 (opens new window)

该“漏洞”利用 QueryWrapper 允许字符串传入 字段名 人为注入 SQL片段 也是犯了上面一样的错误,属于 软件编写存在bug 我们可以使用 LambdaQueryWrapper 避免动态字符串。

编辑 (opens new window)
上次更新: 2024/06/15, 15:12:25
自定义ID生成器
逻辑删除

← 自定义ID生成器 逻辑删除→

最近更新
01
04.Spring Boot 韩顺平
10-12
02
day14
08-29
03
day09
08-29
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式