一句话总结:安全不是一次性任务,而是一个持续的过程。
本指南从 传输层安全、应用层安全、依赖与运维安全 三个维度,结合 Spring Boot 的最佳实践,协助你构建纵深防御的安全体系。
| 安全领域 | 威胁 | 防护措施 | Spring Boot 实践 | 
| 传输安全 (HTTPS) | 窃听、中间人攻击 | 加密通信通道 | 配置 SSL/TLS,强制 HTTP → HTTPS | 
| 认证与授权 | 未授权访问 | 控制访问权限 | Spring Security,密码使用 BCrypt 哈希 | 
| CSRF | 跨站请求伪造 | 校验请求合法性 | Spring Security 内置 CSRF Token | 
| XSS | 跨站脚本注入 | 输入验证 + 输出编码 | Bean Validation、Jsoup 清洗、CSP | 
| SQL 注入 | 数据库攻击 | 参数化查询 | JPA / Hibernate / MyBatis 的预编译语句 | 
| 依赖安全 | 第三方漏洞 | 检测与升级 | OWASP Dependency-Check,定期更新 | 
| HTTP 安全头 | 浏览器端攻击 | 浏览器内置防护 | HSTS、X-Content-Type-Options、CSP | 
生产环境:使用 CA 签发的证书(Let’s Encrypt 免费、DigiCert 等)
测试环境:自签证书
keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.p12 -storetype PKCS12 -validity 365
server.port=8443server.ssl.key-store-type=PKCS12server.ssl.key-store=classpath:keystore.p12server.ssl.key-store-password=your-secret-passwordserver.ssl.key-alias=mydomain
@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {    http.requiresChannel(channel -> channel.anyRequest().requiresSecure());    return http.build();
}@Beanpublic PasswordEncoder passwordEncoder() {    return new BCryptPasswordEncoder();
}// user.setPassword(passwordEncoder.encode(rawPassword));默认开启:Spring Security 为每个会话生成 CSRF Token
表单项目:Thymeleaf 自动带上 Token
前后端分离:需从 Cookie/响应头中读取 Token,带入 X-CSRF-TOKEN 请求头
⚠️ 只有无状态 API 服务时才思考关闭:
http.csrf(csrf -> csrf.disable()); // 不推荐
输入验证:JSR-303 注解 (@NotBlank, @Email)
富文本清洗:
String safeHtml = Jsoup.clean(unsafeHtml, Whitelist.basicWithImages());
输出转义:Thymeleaf 默认 th:text 转义
CSP 策略:
http.headers(headers -> headers .addHeaderWriter(new StaticHeadersWriter( "Content-Security-Policy", "default-src 'self'; script-src 'self' https://cdn.safe.com;")));
JPA 示例
@Query("SELECT u FROM User u WHERE u.username = :username")
User findByUsername(@Param("username") String username);MyBatis 示例
<select id="findUser" resultType="User">
    SELECT * FROM user WHERE username = #{username}</select><!-- 绝对不要用 ${} 拼接 SQL --><plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>8.2.1</version> <executions> <execution> <goals><goal>check</goal></goals> </execution> </executions></plugin>
执行:
mvn verifymvn dependency-check:check
依赖更新检查:
mvn versions:display-dependency-updates
http.headers(headers -> headers
    .contentSecurityPolicy(csp -> csp.policyDirectives("default-src 'self'"))
    .httpStrictTransportSecurity(hsts -> hsts
        .includeSubDomains(true).maxAgeInSeconds(31536000))
    .frameOptions(frame -> frame.sameOrigin())
    .xssProtection(xss -> xss
        .headerValue(XXssProtectionHeaderWriter.HeaderValue.ENABLED_MODE_BLOCK))
    .contentTypeOptions(contentType -> {})
);HSTS:强制 HTTPS
X-Frame-Options:防点击劫持
X-Content-Type-Options:防 MIME 嗅探
CSP:核心 XSS 防御手段
网络层:HTTPS、防火墙
系统层:最小化权限、定期更新
应用层:Spring Security、CSRF、XSS、SQL 注入防护
依赖层:依赖扫描、漏洞修复
运维层:Actuator 加固、日志审计
上线前用 OWASP ZAP 或 Burp Suite 进行渗透测试,能提前发现大部分隐患。
这份指南相当于一个 Spring Boot 安全全景手册,从证书、到 CSRF/XSS/SQL 注入、再到依赖与 HTTP 头,都覆盖了。