SuperAPI AI 工具集

springboot-security

安全与审计

查看项目

更新于 10-15 08:41

技能介绍

用途

Spring Boot Security 是一份针对 Java Spring Boot 服务的 Spring Security 最佳实践参考,用于在开发过程中加固认证、授权、输入处理、密钥管理、安全响应头、限流和依赖安全等环节。资料建议在以下场景启用:添加认证(JWT、OAuth2、基于会话)、实现授权(@PreAuthorize、基于角色的访问)、校验用户输入(Bean Validation、自定义校验器)、配置 CORS、CSRF 或安全响应头、管理密钥(Vault、环境变量)、添加限流或暴力破解防护、扫描依赖中的 CVE。

主要能力

认证

  • 优先使用无状态 JWT 或不透明令牌并配合吊销列表。
  • 会话使用 httpOnly、Secure、SameSite=Strict 的 Cookie。
  • 通过 OncePerRequestFilter 或资源服务器校验令牌。资料给出了 JwtAuthFilter 示例,从 Authorization 头提取 Bearer 令牌并设置 SecurityContext。

授权

  • 启用方法级安全:@EnableMethodSecurity。
  • 使用 @PreAuthorize("hasRole('ADMIN')") 或 @PreAuthorize("@authz.canEdit(#id)")。
  • 默认拒绝,仅暴露必要的 scope。资料给出了 AdminController 示例,对 listUsers 使用 hasRole('ADMIN'),对 deleteUser 使用 @authz.isOwner(#id, authentication)。

输入校验

  • 在控制器上使用 @Valid 配合 Bean Validation。
  • 在 DTO 上应用 @NotBlank、@Email、@Size 及自定义校验器。
  • 渲染前对 HTML 使用白名单进行净化。资料对比了无校验的 createUser 与使用 CreateUserDto 记录并带约束注解的写法。

SQL 注入防护

  • 使用 Spring Data 仓库或参数化查询。
  • 原生查询使用 :param 绑定,绝不拼接字符串。资料给出了错误示例(字符串拼接)与正确示例(@Query 使用 :name 绑定、Spring Data 派生查询)。

密码编码

  • 始终使用 BCrypt 或 Argon2 哈希密码,绝不存储明文。
  • 使用 PasswordEncoder bean,而非手动哈希。资料示例为 new BCryptPasswordEncoder(12),成本因子 12。

CSRF 防护

  • 浏览器会话应用保持 CSRF 启用,在表单/请求头中包含令牌。
  • 纯 API 使用 Bearer 令牌时禁用 CSRF,依赖无状态认证。资料给出了禁用 CSRF 并设置 SessionCreationPolicy.STATELESS 的配置。

密钥管理

  • 源码中不得包含密钥,从环境变量或 vault 加载。
  • application.yml 不含凭据,使用占位符。
  • 定期轮换令牌和数据库凭据。资料对比了硬编码密码与 ${DB_PASSWORD} 占位符、Spring Cloud Vault 集成配置。

安全响应头

资料给出了通过 http.headers 配置 Content-Security-Policy(default-src 'self')、frameOptions sameOrigin、xssProtection、referrerPolicy NO_REFERRER 的示例。

CORS 配置

  • 在安全过滤器层配置 CORS,而非按控制器配置。
  • 限制允许的来源,生产环境绝不使用 *。资料给出了 CorsConfigurationSource bean 示例,设置 allowedOrigins、allowedMethods、allowedHeaders、allowCredentials、maxAge,并在 SecurityFilterChain 中通过 http.cors 引用。

限流

  • 对昂贵接口应用 Bucket4j 或网关级限制。
  • 对突发流量记录并告警,返回 429 并附带重试提示。资料给出了 RateLimitFilter 示例,按客户端 IP 使用 Bucket4j 限制每分钟 100 次,超出返回 429 与错误 JSON。

依赖安全

  • 在 CI 中运行 OWASP Dependency Check / Snyk。
  • 保持 Spring Boot 与 Spring Security 在受支持版本。
  • 对已知 CVE 使构建失败。

日志与 PII

  • 绝不记录密钥、令牌、密码或完整 PAN 数据。
  • 脱敏敏感字段,使用结构化 JSON 日志。

文件上传

  • 校验大小、内容类型和扩展名。
  • 存储在 web 根目录之外;必要时进行扫描。

使用方式

资料以代码示例和配置片段的形式给出实践建议,涵盖过滤器、控制器、配置类、application.yml 等。开发者可在添加认证、处理输入、创建接口或管理密钥时对照这些示例进行实现。发布前可参照资料末尾的检查清单逐项核对。

适用场景

适用于 Java Spring Boot 服务的安全加固,尤其是需要实现认证授权、输入校验、CSRF/CORS 配置、密钥外置、限流和依赖扫描的项目。

限制

资料未提供具体的安装命令、版本要求、收费信息或平台支持范围。部分内容(如 OAuth2、Vault 集成)仅提及方向,未展开完整配置。