演练学习笔记之ruoyi
字数 1926 2025-08-18 11:36:47

RuoYi框架安全演练学习笔记

1. RuoYi框架简介

RuoYi是一款基于Spring Boot和Apache Shiro的快速开发框架,广泛应用于企业级管理系统开发。该框架提供了完善的权限管理、代码生成、监控管理等功能模块。

2. RuoYi常见安全漏洞分析

2.1 默认凭证漏洞

  • 问题描述:早期版本存在默认管理员账号admin/admin123
  • 影响版本:v3.x及以下版本
  • 修复方案
    • 升级到最新版本
    • 首次安装后强制修改默认密码
    • 部署时检查并删除默认账户

2.2 SQL注入漏洞

  • 漏洞位置:部分动态SQL拼接处
  • 攻击示例
    // 错误示例
    String sql = "SELECT * FROM sys_user WHERE username = '" + username + "'";
    
    // 正确写法应使用预编译
    String sql = "SELECT * FROM sys_user WHERE username = ?";
    
  • 修复方案
    • 使用MyBatis的#{}占位符而非${}拼接
    • 启用MyBatis的SQL注入防护
    • 对用户输入进行严格过滤

2.3 XSS漏洞

  • 漏洞位置:未转义的用户输入展示点
  • 攻击示例
    <script>alert('xss')</script>
    
  • 修复方案
    • 前端使用Vue的v-html指令自动转义
    • 后端使用HtmlUtils.htmlEscape进行转义
    • 设置HTTP头X-XSS-Protection

2.4 CSRF防护缺陷

  • 问题描述:早期版本未启用CSRF防护或实现不完善
  • 修复方案
    • 启用Shiro的CSRF防护
    • 确保表单包含_csrf令牌
    • 检查请求头X-Requested-With

2.5 权限绕过漏洞

  • 漏洞类型
    • 注解配置不当导致的权限校验缺失
    • URL路径权限配置遗漏
  • 修复方案
    • 检查所有Controller方法的@RequiresPermissions注解
    • 定期审计权限配置表(sys_menu)
    • 实现权限的自动扫描校验机制

3. RuoYi安全加固指南

3.1 认证安全

  1. 密码策略

    • 启用复杂度要求(大小写、数字、特殊字符)
    • 实现密码历史记录防止重复使用
    • 设置密码有效期(如90天)
  2. 多因素认证

    • 集成Google Authenticator
    • 实现短信/邮件验证码
  3. 会话管理

    • 设置会话超时(30分钟无操作)
    • 限制并发登录
    • 实现登录失败锁定(5次失败后锁定15分钟)

3.2 数据安全

  1. 敏感数据保护

    • 数据库加密:使用AES加密敏感字段
    • 日志脱敏:手机号、身份证号等
    • 传输加密:强制HTTPS
  2. 审计日志

    • 记录关键操作(登录、权限变更、数据删除)
    • 实现日志防篡改机制
    • 定期备份审计日志

3.3 安全配置

  1. 依赖安全

    <!-- 示例:确保使用安全版本的依赖 -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.11.0</version> <!-- 使用最新稳定版 -->
    </dependency>
    
  2. HTTP安全头

    // Spring Security配置示例
    http.headers()
        .contentSecurityPolicy("default-src 'self'")
        .xssProtection().block(true)
        .and()
        .httpStrictTransportSecurity()
        .includeSubDomains(true)
        .maxAgeInSeconds(31536000);
    
  3. 生产环境配置

    • 禁用Swagger等开发工具
    • 关闭调试模式(spring.profiles.active=prod)
    • 修改默认错误页面避免信息泄露

4. RuoYi渗透测试要点

4.1 信息收集

  1. 指纹识别

    • 检查/login路径
    • 识别RuoYi特有的静态资源路径
    • 分析HTTP响应头中的Server/X-Powered-By
  2. 版本识别

    • 检查HTML注释中的版本信息
    • 通过/js/ruoyi.js的修改时间判断
    • 访问/actuator/info(如果开启)

4.2 漏洞利用

  1. 未授权访问测试

    • 尝试直接访问管理接口
    • 测试API权限控制
    • 检查跨目录访问
  2. 接口安全测试

    # 使用Burp Suite测试接口
    POST /system/user/list HTTP/1.1
    Content-Type: application/json
    
    {"pageSize":10, "pageNum":1}
    
    • 测试参数注入
    • 检查越权访问
    • 验证分页参数安全
  3. 文件上传测试

    • 尝试绕过上传限制
    • 测试Webshell上传
    • 检查文件类型校验逻辑

4.3 后渗透测试

  1. 权限提升

    • 分析权限设计缺陷
    • 测试垂直/水平越权
    • 尝试获取管理员会话
  2. 数据泄露测试

    • 检查敏感接口的数据返回
    • 测试SQL注入获取数据
    • 分析备份文件泄露

5. RuoYi安全开发规范

5.1 安全编码实践

  1. 输入验证

    // 使用Hibernate Validator进行输入验证
    @NotBlank(message = "用户名不能为空")
    @Size(min = 4, max = 20, message = "用户名长度必须在4-20之间")
    private String username;
    
  2. 输出编码

    // 使用Spring的HtmlUtils进行输出编码
    model.addAttribute("safeContent", HtmlUtils.htmlEscape(userInput));
    
  3. 安全查询

    // 使用MyBatis预编译
    @Select("SELECT * FROM sys_user WHERE username = #{username}")
    SysUser selectByUsername(@Param("username") String username);
    

5.2 权限设计规范

  1. RBAC模型

    • 角色继承关系清晰
    • 最小权限原则
    • 定期权限审计
  2. 权限注解使用

    // 控制器方法权限控制
    @RequiresPermissions("system:user:view")
    @GetMapping("/list")
    public TableDataInfo list(SysUser user) {
        // ...
    }
    
  3. 数据权限

    • 实现部门数据过滤
    • 防止横向越权
    • 敏感操作二次确认

6. 应急响应与修复

6.1 漏洞修复流程

  1. 确认漏洞

    • 复现漏洞场景
    • 确定影响范围
    • 评估风险等级
  2. 临时解决方案

    • WAF规则拦截
    • 禁用相关功能
    • 权限临时调整
  3. 永久修复

    • 代码层面修复
    • 安全测试验证
    • 版本更新发布

6.2 安全监控

  1. 异常检测

    • 监控失败登录尝试
    • 检测敏感操作
    • 审计权限变更
  2. 入侵检测

    • 部署RASP防护
    • 分析请求日志
    • 监控Webshell行为

7. 总结与最佳实践

  1. 定期安全评估

    • 每季度进行安全审计
    • 依赖组件漏洞扫描
    • 渗透测试
  2. 安全开发生命周期

    • 需求阶段考虑安全
    • 设计阶段威胁建模
    • 编码阶段安全审查
    • 测试阶段安全测试
  3. 持续安全改进

    • 跟踪安全公告
    • 参与安全社区
    • 建立安全知识库

通过以上全面的安全措施,可以显著提升RuoYi框架应用的安全性,有效防御常见Web攻击,保障企业管理系统安全稳定运行。

RuoYi框架安全演练学习笔记 1. RuoYi框架简介 RuoYi是一款基于Spring Boot和Apache Shiro的快速开发框架,广泛应用于企业级管理系统开发。该框架提供了完善的权限管理、代码生成、监控管理等功能模块。 2. RuoYi常见安全漏洞分析 2.1 默认凭证漏洞 问题描述 :早期版本存在默认管理员账号admin/admin123 影响版本 :v3.x及以下版本 修复方案 : 升级到最新版本 首次安装后强制修改默认密码 部署时检查并删除默认账户 2.2 SQL注入漏洞 漏洞位置 :部分动态SQL拼接处 攻击示例 : 修复方案 : 使用MyBatis的#{}占位符而非${}拼接 启用MyBatis的SQL注入防护 对用户输入进行严格过滤 2.3 XSS漏洞 漏洞位置 :未转义的用户输入展示点 攻击示例 : 修复方案 : 前端使用Vue的v-html指令自动转义 后端使用HtmlUtils.htmlEscape进行转义 设置HTTP头X-XSS-Protection 2.4 CSRF防护缺陷 问题描述 :早期版本未启用CSRF防护或实现不完善 修复方案 : 启用Shiro的CSRF防护 确保表单包含_ csrf令牌 检查请求头X-Requested-With 2.5 权限绕过漏洞 漏洞类型 : 注解配置不当导致的权限校验缺失 URL路径权限配置遗漏 修复方案 : 检查所有Controller方法的@RequiresPermissions注解 定期审计权限配置表(sys_ menu) 实现权限的自动扫描校验机制 3. RuoYi安全加固指南 3.1 认证安全 密码策略 : 启用复杂度要求(大小写、数字、特殊字符) 实现密码历史记录防止重复使用 设置密码有效期(如90天) 多因素认证 : 集成Google Authenticator 实现短信/邮件验证码 会话管理 : 设置会话超时(30分钟无操作) 限制并发登录 实现登录失败锁定(5次失败后锁定15分钟) 3.2 数据安全 敏感数据保护 : 数据库加密:使用AES加密敏感字段 日志脱敏:手机号、身份证号等 传输加密:强制HTTPS 审计日志 : 记录关键操作(登录、权限变更、数据删除) 实现日志防篡改机制 定期备份审计日志 3.3 安全配置 依赖安全 : HTTP安全头 : 生产环境配置 : 禁用Swagger等开发工具 关闭调试模式(spring.profiles.active=prod) 修改默认错误页面避免信息泄露 4. RuoYi渗透测试要点 4.1 信息收集 指纹识别 : 检查/login路径 识别RuoYi特有的静态资源路径 分析HTTP响应头中的Server/X-Powered-By 版本识别 : 检查HTML注释中的版本信息 通过/js/ruoyi.js的修改时间判断 访问/actuator/info(如果开启) 4.2 漏洞利用 未授权访问测试 : 尝试直接访问管理接口 测试API权限控制 检查跨目录访问 接口安全测试 : 测试参数注入 检查越权访问 验证分页参数安全 文件上传测试 : 尝试绕过上传限制 测试Webshell上传 检查文件类型校验逻辑 4.3 后渗透测试 权限提升 : 分析权限设计缺陷 测试垂直/水平越权 尝试获取管理员会话 数据泄露测试 : 检查敏感接口的数据返回 测试SQL注入获取数据 分析备份文件泄露 5. RuoYi安全开发规范 5.1 安全编码实践 输入验证 : 输出编码 : 安全查询 : 5.2 权限设计规范 RBAC模型 : 角色继承关系清晰 最小权限原则 定期权限审计 权限注解使用 : 数据权限 : 实现部门数据过滤 防止横向越权 敏感操作二次确认 6. 应急响应与修复 6.1 漏洞修复流程 确认漏洞 : 复现漏洞场景 确定影响范围 评估风险等级 临时解决方案 : WAF规则拦截 禁用相关功能 权限临时调整 永久修复 : 代码层面修复 安全测试验证 版本更新发布 6.2 安全监控 异常检测 : 监控失败登录尝试 检测敏感操作 审计权限变更 入侵检测 : 部署RASP防护 分析请求日志 监控Webshell行为 7. 总结与最佳实践 定期安全评估 : 每季度进行安全审计 依赖组件漏洞扫描 渗透测试 安全开发生命周期 : 需求阶段考虑安全 设计阶段威胁建模 编码阶段安全审查 测试阶段安全测试 持续安全改进 : 跟踪安全公告 参与安全社区 建立安全知识库 通过以上全面的安全措施,可以显著提升RuoYi框架应用的安全性,有效防御常见Web攻击,保障企业管理系统安全稳定运行。