若依(RuoYi)后台管理系统部署后必做的5项安全加固检查(避坑指南)
若依(RuoYi)后台管理系统部署后必做的5项安全加固检查(避坑指南)
在企业级后台管理系统的实际部署中,安全配置往往成为最容易被忽视的环节。若依(RuoYi)作为国内广泛使用的开源框架,其默认配置存在多个需要立即处理的安全隐患。本文将聚焦五个关键风险点,提供可立即执行的加固方案。
1. 默认接口路径的访问控制
部署完成后首先需要检查的是各类管理接口的暴露情况。许多企业遭遇安全事件的原因,正是未对以下高危路径做访问限制:
/prod-api/druid/login.html- Druid监控面板/dev-api/druid/login.html- 开发环境监控入口/admin-api/druid- 常见管理接口前缀
加固方案:
// 在Spring Security配置中添加路径拦截 http.authorizeRequests() .antMatchers("/druid/**").hasRole("ADMIN") .antMatchers("/prod-api/**").authenticated() .antMatchers("/dev-api/**").denyAll();注意:同时修改
application.yml中的druid.stat-view-servlet.enabled为false可彻底关闭监控面板
2. Swagger文档的环境隔离
开发阶段常用的Swagger UI接口会暴露完整的API结构和参数信息,生产环境必须禁用:
# application-prod.yml spring: swagger: enabled: false对于必须保留文档的场景,建议增加基础认证:
@Bean public SecurityFilterChain swaggerFilterChain(HttpSecurity http) throws Exception { http.securityMatcher("/swagger*/**", "/v3/api-docs/**") .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .httpBasic(withDefaults()); return http.build(); }3. 中间件安全配置
Redis防护措施
检查redis.conf关键配置项:
| 配置项 | 安全值 | 风险说明 |
|---|---|---|
protected-mode | yes | 禁止外部直接访问 |
requirepass | 复杂密码 | 避免未授权访问 |
bind | 内网IP | 限制访问来源 |
# 通过命令行快速验证 redis-cli -h 127.0.0.1 -a yourpassword --no-auth-warning CONFIG GET requirepassZookeeper加固
在zoo.cfg中添加:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider enforce.auth.enabled=true enforce.auth.schemes=sasl4. Shiro密钥修改
若依默认使用的rememberMe密钥存在反序列化风险,必须立即更换:
// 在ShiroConfig中重写配置 @Bean public RememberMeManager rememberMeManager() { CookieRememberMeManager manager = new CookieRememberMeManager(); manager.setCipherKey(Base64.decode("新生成的32位随机密钥")); return manager; }生成新密钥的工具方法:
byte[] key = new byte[32]; new SecureRandom().nextBytes(key); String encodedKey = Base64.encodeToString(key);5. 认证体系强化
密码策略实施
在application.yml中配置:
ruoyi: password: minLength: 10 maxLength: 20 requireSpecialChar: true requireDigit: true requireUpper: true传输层防护
强制HTTPS并启用HSTS:
http.requiresChannel() .anyRequest().requiresSecure() .and() .headers() .httpStrictTransportSecurity() .maxAgeInSeconds(31536000) .includeSubDomains(true);登录接口增加图形验证码和限流:
@PostMapping("/login") @RateLimiter(value = 5, key = "#username") public AjaxResult login( @RequestParam String username, @RequestParam String password, @RequestParam String captcha) { // 验证逻辑 }持续监控与审计
部署完成后建议建立定期检查机制:
接口扫描:每月执行自动化测试
nmap -sV --script=http-vuln* target_ip日志分析:重点关注异常登录尝试
SELECT * FROM sys_logininfor WHERE status = '1' ORDER BY access_time DESC LIMIT 100;依赖检查:保持组件更新
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.11.0</version> <!-- 确保使用最新稳定版 --> </dependency>
实际运维中发现,90%的安全事件都源于未及时修复的已知漏洞。建议将上述检查项纳入部署checklist,新系统上线前必须全部验证通过。
