电商系统承载用户资金和个人信息,安全问题是零容忍的 。本文将Spring Boot电商项目的安全加固拆解为六个维度 ,每个维度给出可落地的方案。
一 、JWT Token安全与续期JWT是电商API最常用的无状态认证方案,但有几个常见坑:
不要存敏感信息:JWT的Payload仅Base64编码,任何人可解密。用户手机号、密码Hash一律不得放入JWT 。
短有效期+RefreshToken:AccessToken有效期15分钟 ,RefreshToken有效期7天。AccessToken过期后用RefreshToken换取新的,避免长期有效的单一Token:
public TokenPair refresh(String refreshToken) { if (!refreshTokenService.validate(refreshToken)) { throw new UnauthorizedException(); } String newAccess = jwtService.generateAccessToken(userId); String newRefresh = jwtService.generateRefreshToken(userId); refreshTokenService.revoke(refreshToken); // 旧RefreshToken作废 return new TokenPair(newAccess, newRefresh);}
Token黑名单:登出时将AccessToken加入Redis黑名单,TTL等于Token剩余有效期。
二、接口防刷与限流关键接口(登录 、注册、短信验证码)必须限流。轻量方案用Guava RateLimiter或拦截器+Redis:
@Componentpublic class RateLimitInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest req, ...) { String key = "rate:" + req.getRequestURI() + ":" + getClientIP(req); Long count = redisTemplate.opsForValue().increment(key); if (count == 1) redisTemplate.expire(key, 60, TimeUnit.SECONDS); if (count > 100) throw new RateLimitException(); return true; }}
生产环境建议上专业的网关层限流(Sentinel、Nginx limit_req) 。
三、敏感数据脱敏日志和API响应中的手机号 、身份证、银行卡号必须脱敏:
public class SensitiveUtils { public static String maskMobile(String mobile) { return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); }}
日志脱敏通过Logback的%replace或自定义Converter实现,确保敏感字段不出现在日志文件中。
四、SQL注入防护MyBatis使用#{}预编译即可防注入。绝对禁止用${}拼接用户输入 。动态排序字段用白名单校验:
private static final Set<String> ALLOWED_COLUMNS = Set.of("id", "price", "create_time");public List<Product> listByOrder(String orderBy) { if (orderBy == null || !ALLOWED_COLUMNS.contains(orderBy)) { throw new IllegalArgumentException("非法排序字段"); } return mapper.listByOrder(orderBy);}五 、CORS与CSRF防护
CORS配置不要用allowedOrigins("*") ,必须指定白名单域名。CSRF Token用于Cookie+Session架构的页面操作,纯API+JWT架构可免除(JWT本身不依赖Cookie)。
六、安全检查清单检查项 | 方案 | 优先级 |
JWT续期与黑名单 | AccessToken短效+RefreshToken轮换 | P0 |
接口限流 | Redis计数+网关层兜底 | P0 |
敏感数据脱敏 | 响应层+日志层双重脱敏 | P0 |
SQL注入 | 全量#{},${}加白名单 | P0 |
HTTPS强制 | Nginx 301重定向 | P1 |
依赖漏洞扫描 | OWASP Dependency Check | P1 |
这套加固清单基本覆盖了Java商城安全的核心面 。如有兴趣 ,可同步对比CRMEB等开源商城的安全实现,了解不同项目的加固思路差异。
本文来自作者[来平]投稿,不代表点新号立场,如若转载,请注明出处:https://sc-hx.cn/cshi/202609-12085.html
评论列表(3条)
我是点新号的签约作者“来平”
本文概览:jwt解密(jwt解密工具)电商系统承载用户资金和个人信息,安全问题是零容忍的。本文将Spring Boot电商项目的安全加固拆解为六个维度,每个维度给出可落地的方案。一、JW...
文章不错《jwt解密(jwt解密工具)》内容很有帮助