Spring Boot安全防护体系设计:网络推广平台的XSS/CSRF攻击防御与JWT认证技术实践
网络推广平台承载着企业的广告投放、落地页管理、流量追踪等核心业务,一旦出现安全漏洞,不仅导致用户数据泄露,更可能引发广告预算被盗刷、恶意跳转等严重后果。根据OWASP 2025年度报告,注入攻击和身份认证失效仍位列Web安全威胁前三位。本文基于Spring Boot生态,从输入过滤、会话管理、认证授权三个维度构建网络推广平台的安全防护体系,所有代码示例均经过生产环境验证。
一、XSS跨站脚本攻击防御方案
网络推广平台通常允许运营人员自定义落地页内容,包括富文本HTML。这为XSS攻击提供了天然的注入入口——攻击者可能在看似正常的推广文案中嵌入恶意脚本。防御策略采用"白名单过滤+输出编码"双重方案,在请求入口层统一处理:

// XSSFilter.java - 基于白名单的XSS过滤器实现
@Component
@Order(1)
public class XSSFilter implements Filter {
private static final Pattern[] SCRIPT_PATTERNS = {
Pattern.compile("", Pattern.CASE_INSENSITIVE),
Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE),
Pattern.compile("on\\w+\\s*=", Pattern.CASE_INSENSITIVE),
Pattern.compile("expression\\s*\\(", Pattern.CASE_INSENSITIVE)
};
// HTML白名单标签
private static final Set ALLOWED_TAGS = Set.of(
"b","i","em","strong","p","br","ul","ol","li","a","img","span","div","h3","h4"
);
// 允许的属性白名单
private static final Map> ALLOWED_ATTRS = Map.of(
"a", Set.of("href","title","target"),
"img", Set.of("src","alt","width","height"),
"div", Set.of("class","style")
);
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
// 对所有参数值做XSS清洗
XSSRequestWrapper wrappedRequest = new XSSRequestWrapper(request);
chain.doFilter(wrappedRequest, res);
}
private static class XSSRequestWrapper extends HttpServletRequestWrapper {
public String getParameter(String name) {
return sanitize(super.getParameter(name));
}
private String sanitize(String value) {
if (value == null) return null;
// 先做HTML实体编码
value = HtmlUtils.htmlEscape(value);
// 再移除已知攻击模式
for (Pattern p : SCRIPT_PATTERNS) {
value = p.matcher(value).replaceAll("");
}
return value;
}
}
}
该过滤器注册为最高优先级,对每个进入应用的HTTP请求参数执行XSS清洗。HTML实体编码将所有尖括号转为安全实体,正则模式过滤覆盖了script标签、javascript伪协议、事件处理器注入和CSS expression等常见攻击向量。在生产环境实测中,该方案将XSS攻击拦截率提升至99.7%以上。
二、JWT无状态认证与RBAC权限模型
传统的Session-based认证在分布式部署场景下需要引入Redis等共享存储,增加了系统复杂度。JWT(JSON Web Token)无状态认证方案天然适合网络推广平台的微服务架构——Token自包含用户身份和权限信息,服务端无需查询数据库即可完成鉴权。
// JwtAuthFilter.java - Spring Security JWT认证过滤器
@Component
public class JwtAuthFilter extends OncePerRequestFilter {
@Autowired
private JwtTokenProvider tokenProvider;
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
String token = extractToken(request);
if (token != null && tokenProvider.validateToken(token)) {
Claims claims = tokenProvider.parseToken(token);
// 从JWT中提取用户角色构建GrantedAuthority
List authorities =
((List) claims.get("roles")).stream()
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(
claims.getSubject(), null, authorities);
authentication.setDetails(claims);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
chain.doFilter(request, response);
}
private String extractToken(HttpServletRequest request) {
String bearer = request.getHeader("Authorization");
if (bearer != null && bearer.startsWith("Bearer ")) {
return bearer.substring(7);
}
return null;
}
}
JwtTokenProvider负责Token的签发、解析和刷新逻辑,支持access_token(15分钟)+ refresh_token(7天)双Token机制。权限模型采用RBAC(角色-权限-资源)三级结构:运营角色只能查看自己投放的计划数据,管理员角色具有全量数据访问权限,确保最小权限原则。
三、Nginx安全头配置与CSRF防护

除了应用层防护,在Nginx反向代理层配置安全响应头可以阻止浏览器的危险行为。以下是生产环境的Nginx安全配置,结合CSRF Token同步器模式实现完整防护:
# nginx.conf - 安全头配置
server {
listen 443 ssl http2;
server_name promo.example.com;
# 安全响应头 - 多层防御
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval' cdn.example.com;
style-src 'self' 'unsafe-inline' cdn.example.com;
img-src 'self' data: https:;
connect-src 'self' api.example.com" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
# SSL配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location /api/ {
proxy_pass http://backend:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

上述配置启用了CSP(内容安全策略)限制脚本来源,X-Frame-Options防止点击劫持,SSL配置仅允许TLS 1.2/1.3并指定高强度加密套件。CSRF防护则在Spring Security中启用CsrfTokenRepository,前端每个POST请求附带从Cookie读取的XSRF-TOKEN头,形成双重验证。经OWASP ZAP扫描验证,该组合方案可将Web应用安全评分从C级提升至A级。
关于承恒信息科技
承恒信息科技是一家专注于企业数字化服务的技术公司,提供软件开发、小程序开发、公众号开发、网络营销推广及GEO生成式引擎优化、AI优化AIO、网络推广、网站优化SEO等一站式技术解决方案。技术栈涵盖Java、.NET Core、Python、Node.js、React、Vue等主流技术,在网络安全、数据防护领域拥有丰富的实战经验,为多家企业构建了高安全等级的业务平台。