Security Audit Skill 是一个面向 Java 应用的安全检查清单技能,依据 OWASP Top 10 与安全编码实践整理,帮助在代码审查与发布前发现常见安全问题。它适用于 Spring、Quarkus、Jakarta EE 以及纯 Java 项目。
一、适用时机
- 安全代码审查
- 生产发布之前
- 用户询问“security”“vulnerability”“OWASP”相关内容
- 审查认证/授权代码
- 检查注入类漏洞
二、OWASP Top 10 快速参考 技能给出风险与 Java 缓解措施的对应关系:
- A01 访问控制失效:基于角色的检查,默认拒绝
- A02 加密失败:使用强算法,不硬编码密钥
- A03 注入:参数化查询,输入校验
- A04 不安全设计:威胁建模,安全默认值
- A05 安全配置错误:关闭调试,配置安全响应头
- A06 易受攻击的组件:依赖扫描与更新
- A07 认证失败:强密码、MFA、会话管理
- A08 数据完整性失败:验证签名,安全反序列化
- A09 日志失败:记录安全事件,不记录敏感数据
- A10 SSRF:校验 URL,域名允许列表
三、输入校验 技能推荐在边界处使用 Bean Validation(JSR 380),可在 Spring、Quarkus、Jakarta EE 及独立环境使用。示例通过 @NotNull、@Size、@Pattern、@Email、@Min、@Max 等注解约束用户名、邮箱、密码、年龄等字段,并在控制器/资源方法上用 @Valid 触发校验。还介绍了自定义校验注解(如 @SafeHtml)与校验器实现,用于检测危险 HTML 模式。 技能强调允许列表优于阻止列表:阻止列表容易被绕过,允许列表只放行已知安全格式。
四、SQL 注入防护
- JPA/Hibernate:使用参数化查询、Criteria API、命名参数;禁止字符串拼接 JPQL。
- 原生查询:使用参数化原生查询;禁止拼接原生 SQL。
- JDBC:使用 PreparedStatement 与占位符;禁止用 Statement 拼接执行。
五、XSS 防护
- 输出编码:使用模板引擎的自动转义(如 Thymeleaf 默认转义);需要展示 HTML 时谨慎使用 th:utext,仅限可信内容。
- 手动编码:可使用 OWASP Encoder 的 Encode.forHtml、forJavaScript、forUriComponent,并给出 Maven 依赖坐标。
- 内容安全策略(CSP):通过 Spring Boot 配置或 Servlet Filter 添加 CSP 响应头,防止内联脚本。
六、CSRF 防护
- Spring Security:浏览器客户端默认启用 CSRF;无状态 JWT 的 REST API 可禁用;基于会话的浏览器应用应保持启用,并给出 CookieCsrfTokenRepository 配置。
- Quarkus:通过 application.properties 配置 quarkus.http.csrf.enabled 与 cookie 名称。
七、认证与授权
- 密码存储:推荐 BCrypt 或 Argon2;禁止使用无盐 MD5、SHA1、SHA256 存储密码。
- 授权检查:应在服务层检查授权,而非仅依赖控制器层并信任用户输入;给出文档访问的授权判断示例。
- Spring Security 注解:@PreAuthorize 支持角色检查、本人数据检查以及调用自定义授权服务。
八、密钥管理
- 禁止硬编码密钥;使用环境变量、外部配置或密钥管理服务。
- 配置文件中引用环境变量,而非明文写入。
- .gitignore 中排除 .env、.pem、.key、credentials、secret、application-local.yml 等。
九、安全反序列化
- 避免 Java 原生序列化(ObjectInputStream 存在远程代码执行风险)。
- 推荐使用 Jackson 处理 JSON,并谨慎处理多态类型;给出安全配置示例,包括关闭默认类型信息以防范 gadget 攻击。
十、依赖安全
- OWASP Dependency Check:提供 Maven 插件配置,可设置 failBuildOnCVSS 阈值,运行 mvn dependency-check:check 并生成报告。
- 保持依赖更新:使用 mvn versions:display-dependency-updates 与 mvn versions:use-latest-releases。
十一、安全响应头 推荐响应头包括 Content-Security-Policy、X-Content-Type-Options、X-Frame-Options、Strict-Transport-Security、X-XSS-Protection,并给出 Spring Boot 配置示例。
十二、安全日志 应记录登录成功、登录失败、访问拒绝、认证失败等安全事件;禁止记录密码、含信用卡的请求体等敏感数据。
十三、安全检查清单
- 代码审查:输入允许列表校验、SQL 参数化、按上下文输出编码、服务层授权检查、无硬编码密钥、BCrypt/Argon2 哈希密码、不记录敏感数据、浏览器应用启用 CSRF。
- 配置:强制 HTTPS、配置安全响应头、生产环境关闭调试/开发功能、修改默认凭据、错误信息不泄露内部细节。
- 依赖:无已知漏洞(OWASP 检查)、依赖保持更新、移除不必要依赖。
十四、相关技能 java-code-review(通用代码审查)、maven-dependency-audit(依赖漏洞扫描)、logging-patterns(安全日志实践)。
限制:该技能为检查清单与示例集合,具体项目需结合自身框架版本与配置调整;资料未提供自动化扫描以外的运行时防护或具体工具集成细节。