Guns项目安全配置:XSS防护、SQL注入防御与权限控制完整指南 🛡️

【免费下载链接】guns Guns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + 分页插件PageHelper + 通用Mapper + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架. 【免费下载链接】guns 项目地址: https://gitcode.com/gh_mirrors/gun/guns

Guns是一个基于SpringBoot的简洁后台管理系统,致力于为企业提供安全可靠的管理平台。Guns项目安全配置是其核心优势之一,通过多层次的安全防护机制确保系统安全稳定运行。本文将详细介绍Guns项目的三大安全防护机制:XSS攻击防护、SQL注入防御和权限控制,帮助开发者构建更安全的后台管理系统。

🔒 Guns项目安全架构概述

Guns项目采用分层安全防护策略,从前端到后端构建了完整的安全防线。项目通过SpringBoot框架整合了Shiro权限管理、Druid数据库连接池以及自定义的安全过滤器,实现了全方位的安全保护。

核心安全组件

  1. XSS防护机制:通过WafKit工具类和XSS过滤器实现
  2. SQL注入防御:结合MyBatis参数化查询和Druid监控
  3. 权限控制系统:基于Apache Shiro的RBAC权限模型
  4. 数据范围控制:独创的MyBatis数据范围拦截器

🚫 XSS攻击防护机制详解

XSS过滤器配置

Guns项目在src/main/java/com/stylefeng/guns/config/web/WebConfig.java中配置了XSS过滤器:

@Bean
public FilterRegistrationBean xssFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean(new XssFilter());
    registration.addUrlPatterns("/*");
    return registration;
}

WafKit工具类实现

src/main/java/com/stylefeng/guns/core/support/WafKit.java提供了强大的XSS过滤功能:

public static String stripXSS(String value) {
    // 过滤script标签
    Pattern scriptPattern = Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);
    rlt = scriptPattern.matcher(rlt).replaceAll("");
    
    // 过滤javascript表达式
    scriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);
    rlt = scriptPattern.matcher(rlt).replaceAll("");
    
    // 过滤onload事件
    scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
    rlt = scriptPattern.matcher(rlt).replaceAll("");
    
    return rlt;
}

防护效果

XSS防护示意图

Guns的XSS防护机制能够有效过滤:

  • 脚本标签注入 <script>alert('xss')</script>
  • JavaScript伪协议 javascript:alert('xss')
  • 事件处理器 onload=alert('xss')
  • 表达式注入 expression(alert('xss'))

🛡️ SQL注入防御策略

双重防护机制

Guns项目采用双重SQL注入防护策略

  1. WafKit SQL过滤
public static String stripSqlInjection(String value) {
    return (null == value) ? null : value.replaceAll("('.+--)|(--)|(%7C)", "");
}
  1. MyBatis参数化查询 项目使用MyBatis的通用Mapper和PageHelper插件,所有SQL查询都采用参数化方式,从根本上杜绝SQL注入风险。

Druid数据库监控

src/main/java/com/stylefeng/guns/config/web/WebConfig.java中配置了Druid监控:

@Bean
public FilterRegistrationBean druidStatFilter(){
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
    filterRegistrationBean.addUrlPatterns("/*");
    filterRegistrationBean.addInitParameter(
            "exclusions","/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid,/druid/*");
    return filterRegistrationBean;
}

通过Druid的SQL监控功能,可以实时查看SQL执行情况,及时发现潜在的SQL注入攻击。

数据库监控界面

🔐 Shiro权限控制系统

权限配置架构

Guns项目在src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java中配置了完整的权限控制:

@Bean
public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) {
    ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
    shiroFilter.setSecurityManager(securityManager);
    
    Map<String, String> hashMap = new LinkedHashMap<>();
    hashMap.put("/static/**", "anon");
    hashMap.put("/login", "anon");
    hashMap.put("/global/sessionError", "anon");
    hashMap.put("/kaptcha", "anon");
    hashMap.put("/**", "user");
    shiroFilter.setFilterChainDefinitionMap(hashMap);
    return shiroFilter;
}

权限注解使用

Guns项目提供了@Permission注解,简化权限控制:

@Permission(Const.ADMIN_NAME)
@RequestMapping(value = "/add")
@ResponseBody
public Tip add(@Valid UserDto user, BindingResult result) {
    // 业务逻辑
}

权限验证实现

src/main/java/com/stylefeng/guns/core/aop/PermissionAop.java实现了权限验证的AOP切面:

@Aspect
@Component
public class PermissionAop {
    @Around("cutPermission()")
    public Object doPermission(ProceedingJoinPoint point) throws Throwable {
        Permission permission = method.getAnnotation(Permission.class);
        Object[] permissions = permission.value();
        
        if (permissions == null || permissions.length == 0) {
            // 检查全体角色
            boolean result = PermissionCheckManager.checkAll();
            if (result) {
                return point.proceed();
            } else {
                throw new NoPermissionException();
            }
        }
    }
}

前端权限控制

src/main/webapp/WEB-INF/view目录下的模板文件中,使用Shiro标签进行前端权限控制:

@if(shiro.hasPermission("/mgr/add")){
    <#button name="添加" icon="fa-plus" clickFun="MgrUser.openAddMgr()"/>
@}

权限管理界面

📊 数据范围权限控制

MyBatis数据范围拦截器

Guns项目独创了数据范围控制功能,通过src/main/java/com/stylefeng/guns/core/datascope/DataScopeInterceptor.java实现:

@Bean
public DataScopeInterceptor dataScopeInterceptor() {
    return new DataScopeInterceptor();
}

数据范围配置

数据范围控制允许相同角色的用户根据部门不同看到不同的数据。只需在Mapper接口参数中添加DataScope对象:

// 数据范围控制示例
public List<User> selectUsersWithDataScope(@Param("dataScope") DataScope dataScope);

🔧 安全配置最佳实践

1. 密码加密策略

Guns使用Shiro的MD5加盐加密算法:

public static String md5(String credentials, String saltSource) {
    ByteSource salt = new Md5Hash(saltSource);
    return new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations).toString();
}

2. 会话安全管理

@Bean
@ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "false")
public DefaultWebSessionManager defaultWebSessionManager(CacheManager cacheShiroManager, GunsProperties gunsProperties) {
    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
    sessionManager.setSessionValidationInterval(gunsProperties.getSessionValidationInterval() * 1000);
    sessionManager.setGlobalSessionTimeout(gunsProperties.getSessionInvalidateTime() * 1000);
    sessionManager.setDeleteInvalidSessions(true);
    sessionManager.setSessionValidationSchedulerEnabled(true);
    return sessionManager;
}

3. RememberMe功能

@Bean
public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
    CookieRememberMeManager manager = new CookieRememberMeManager();
    manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
    manager.setCookie(rememberMeCookie);
    return manager;
}

🚨 安全监控与日志

业务日志记录

Guns项目通过@BussinessLog注解记录所有关键操作:

@BussinessLog(value = "添加管理员", key = "account", dict = Dict.UserDict)
@Permission(Const.ADMIN_NAME)
@RequestMapping("/add")
@ResponseBody
public Tip add(@Valid UserDto user, BindingResult result) {
    // 业务逻辑
}

登录日志监控

所有登录尝试都会被记录到数据库中,便于安全审计和异常检测。

系统监控界面

📈 安全性能优化建议

1. 定期更新依赖

  • 保持SpringBoot、Shiro、Druid等依赖库的最新版本
  • 定期检查安全漏洞公告

2. 配置安全扫描

  • 使用OWASP ZAP进行安全扫描
  • 定期进行渗透测试

3. 监控配置

  • 开启Druid的SQL防火墙功能
  • 配置慢SQL监控阈值
  • 设置登录失败锁定机制

4. 数据备份策略

  • 定期备份数据库
  • 实现操作日志的归档机制

🎯 总结

Guns项目的安全配置体现了防御深度的设计理念,通过多层次的安全防护机制构建了坚固的安全防线。XSS防护、SQL注入防御和权限控制三大安全支柱相互配合,为后台管理系统提供了全面的安全保障。

核心优势

  • ✅ 全面的XSS攻击防护
  • ✅ 双重SQL注入防御机制
  • ✅ 灵活的RBAC权限控制
  • ✅ 独创的数据范围权限
  • ✅ 完整的操作日志记录
  • ✅ 实时安全监控能力

通过合理配置和正确使用Guns项目的安全功能,开发者可以快速构建出既安全又高效的后台管理系统,为企业的数字化转型提供可靠的技术支撑。

系统架构图

Guns项目的安全配置不仅考虑了技术层面的防护,还兼顾了开发效率和系统性能,是构建企业级后台管理系统的优秀选择。无论是初创公司还是大型企业,都可以基于Guns项目快速搭建安全可靠的管理平台。

【免费下载链接】guns Guns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + 分页插件PageHelper + 通用Mapper + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架. 【免费下载链接】guns 项目地址: https://gitcode.com/gh_mirrors/gun/guns

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐