IMS 承载企业核心数据,安全设计至关重要。本文从接口鉴权、Web 安全、敏感数据保护等方面介绍 IMS 的安全实践。
一、接口鉴权设计
JWT 无状态令牌
/* JWT 结构 */ /* Header.Payload.Signature */ /* Header */ { "alg": "RS256", "typ": "JWT" } /* Payload(建议字段) */ { "sub": "user-123", /* 用户ID */ "username": "zhangsan", "role": "admin", "iat": 1716000000, /* 签发时间 */ "exp": 1716086400, /* 过期时间(24小时) */ "iss": "ims-system" /* 签发者 */ }
Refresh Token 续期
- Access Token:有效期短(15分钟),用于接口调用
- Refresh Token:有效期长(7天),用于刷新 Access Token
- Refresh Token 只在登录时返回,存放在 HttpOnly Cookie 或安全存储
二、Web 安全防护
1. SQL 注入防护
/* 使用参数化查询 */ -- 安全 SELECT * FROM users WHERE id = ?; -- 危险(不要这样写) SELECT * FROM users WHERE id = ' + userInput + ';
2. XSS 防护
- 输出编码:HTML/URL/JavaScript 转义
- 设置 Content-Type:防止 MIME sniffing
- HTTP-only Cookie:禁止 JS 读取敏感 Cookie
3. CSRF 防护
- 同源检测:检查 Referer 和 Origin 头
- CSRF Token:表单隐藏字段 + 请求头携带
- SameSite Cookie:限制 Cookie 跨站发送
三、CORS 配置
/* Spring Boot CORS 配置 */ @Configuration class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOrigins("https://ims.js.cn") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .allowCredentials(true) .maxAge(3600); } }
四、敏感数据保护
- 传输加密:全站 HTTPS
- 存储加密:密码 bcrypt 哈希,敏感字段 AES 加密
- 日志脱敏:手机号、身份证、银行卡等打码处理
- 接口脱敏:返回数据中敏感字段掩码处理
安全检查清单:
- 所有 API 必须鉴权
- 敏感操作记录审计日志
- 密码复杂度要求(长度+特殊字符)
- 登录失败锁定 + IP 限流
- 定期安全扫描与渗透测试
五、总结
- JWT + Refresh Token 是推荐的鉴权方案
- 参数化查询防 SQL 注入
- 输出编码防 XSS,Token 防 CSRF
- 敏感数据加密存储,日志接口都要脱敏