本文目录导读:

这是一个为Java应用设计的账号安全流程规范,该规范涵盖了从注册、登录、会话管理、密码存储到异常监测的完整生命周期。
这份规范适用于Web应用(Spring Boot)、微服务架构以及Android客户端(Java/Kotlin)。
核心原则
- 最小权限:系统组件只拥有完成其功能所需的最小数据访问权限。
- 纵深防御:不依赖单一安全措施(如仅靠复杂密码),需要结合HTTPS、验证码、风控等多层防护。
- 不信任用户输入:所有从客户端(Web/App)传来的数据都视为不可信,必须进行服务端校验。
- 明文不落地:密码、密钥、Token等敏感信息禁止以明文形式存储在数据库、日志、缓存或配置文件中。
用户注册规范
1 前端校验(提升用户体验)
- 用户名:3-20位字母/数字/下划线。
- 密码:强制强度(至少8位,含大写、小写、数字、特殊字符中的3种)。
- 确认密码:前端比对一致性。
- 图形验证码/滑块验证:防止自动化注册。
2 服务端校验(安全核心)
- 唯一性检查:校验用户名、邮箱、手机号是否已存在,注意大小写不敏感(数据库一律转为小写存储)。
- 黑名单过滤:禁止使用常见弱密码、公司名、敏感词汇作为用户名。
- 密码存储:
- 严禁:MD5、SHA-1、Base64、可逆加密。
- 必须:使用BCrypt、SCrypt或Argon2,推荐使用Spring Security自带的
BCryptPasswordEncoder。 - 盐值:算法内置随机盐,无需手动拼接。
- 速率限制:同一IP或设备在1小时内注册请求超过N次,触发限流(如使用Sentinel或Guava RateLimiter)。
用户登录规范
1 认证流程
- 传输安全:全站强制HTTPS,防止中间人攻击。
- 凭证验证:
BCryptPasswordEncoder.matches(明文, 密文)验证密码。- 如果连续登录失败(如5次),冻结账号15分钟或增加CAPTCHA验证。
- 二次验证(2FA/MFA):
- 高敏感操作(提现、修改密码、绑定手机)需强制二次验证。
- 推荐:TOTP(Google Authenticator)、短信验证码、邮件验证码。
- 登录成功处理:
- 记录最近登录IP、时间、设备指纹。
- 清除之前的登录失败计数。
- 发送登录通知(邮件/短信)。
2 会话管理 (Token/JWT)
- JWT签发:
- 有效期:Access Token建议15-30分钟,Refresh Token建议7天。
- Claims:包含用户ID、角色、签发时间、JWT ID(防重放)。
- 签名:使用非对称加密(RS256/ES256)或强对称密钥(HS256,密钥必须定期轮换)。
- Token存储:
- Web:存放于
HttpOnly+Secure+SameSite=Strict的Cookie中,防止XSS窃取。 - App:存放于系统的Keychain(iOS)或EncryptedSharedPreferences / 密钥库(Android)。
- 禁止:禁止存储于localStorage(易受XSS攻击)或URL参数中。
- Web:存放于
3 登出规范
- 服务端:将当前Access Token或用户Session ID加入黑名单/拒绝列表(Redis),直至其自然过期。
- 客户端:清除本地存储的Token及相关状态。
密码与账号恢复
1 修改密码
- 流程:验证旧密码 -> 输入新密码 -> 再次输入新密码。
- 安全:修改成功后,立即清除该用户的所有已签发Token(强制所有设备重新登录)。
- 通知:发送账户变更通知。
2 忘记密码
- 用户输入注册邮箱/手机号。
- 验证身份(强验证):发送一次性重置链接或6位随机码。
- 链接/码有效期:严格限制在15分钟内。
- 链接需包含不可猜测的
token(UUID + 签名),禁止仅使用用户ID。 - 使用过后立即失效。
- 强制:重置密码后,不得自动登录,要求用户重新输入新密码登录。
- 拒绝枚举:无论邮箱/手机号是否存在,返回统一的提示信息(如:“如果该账户存在,您将收到重置邮件”)。
3 账号锁定策略
- 临时锁定:连续失败N次,锁定M分钟。
- 永久锁定:涉嫌被盗、违反服务条款等由管理员操作。
- 解锁方式:通过绑定的手机/邮箱进行自助验证解锁,或联系客服。
敏感操作与风控
在以下操作时,除了标准Token校验,需增加风险控制和二次验证:
| 操作类型 | 风控检测项 | 二次验证手段 |
|---|---|---|
| 登录 | 异地登录、新设备、异常时间段 | 短信/邮箱验证码、MFA |
| 转账/支付 | 大额、频繁、向新账户转 | 支付密码 + OTP / 生物识别 |
| 修改安全设置 | 修改密码、解绑手机/邮箱、修改密保 | 需要原手机/邮箱确认或MFA |
| 查看敏感信息 | 查看全部手机号、身份证号 | 支付密码或临时Token |
风控措施(Java实现建议):
- 位置校验:对比当前登录IP的地理位置与历史记录。
- 设备指纹:生成唯一设备ID,检测是否在陌生设备上操作。
- 行为分析:启动一个异步任务(如CompletableFuture),将用户行为日志发送到流处理平台(Flink/Spark)进行实时评分。
服务端防御与编码规范
1 常见攻击防御
| 攻击类型 | Java防御策略 |
|---|---|
| 暴力破解 | 登录/接口限流(AOP + Redis + Lua脚本实现滑动窗口)。 |
| SQL注入 | 禁用字符串拼接SQL;使用MyBatis-Plus或JPA的预编译传参。 |
| XSS | 前端框架(React/Vue)自带转义;后端使用Jsoup过滤富文本;Spring响应头设置 X-XSS-Protection: 1; mode=block。 |
| CSRF | 使用Spring Security默认开启的CSRF保护;前后端分离使用 SameSite=Strict 的Cookie。 |
| 会话固定 | 用户登录成功后,调用 session.invalidate() 或生成新的Session ID(Spring Security默认已做)。 |
2 日志与审计
- 禁止:禁止在日志中打印
password、token、auth_code等字段(使用logback的replace转换器过滤)。 - 必须:记录所有鉴权失败、权限变更、敏感数据访问的审计日志。
- 字段:
user_id,action,ip,user_agent,timestamp,result(success/fail)。
- 字段:
3 依赖安全
- 定期扫描依赖(Maven/Gradle插件
owasp dependency-check)。 - 及时升级Spring Boot、Tomcat、Jackson等高危组件版本。
数据库设计规范
-- 用户表 (users)
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL, -- BCrypt密文
email VARCHAR(100) UNIQUE,
phone VARCHAR(20) UNIQUE,
mfa_secret VARCHAR(100) DEFAULT NULL, -- TOTP密钥 (加密存储)
account_locked BOOLEAN DEFAULT FALSE,
enabled BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 登录失败记录表 (login_attempts) - 用于限流
CREATE TABLE login_attempts (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT,
ip_address VARCHAR(45),
attempt_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- (建议: 使用Redis替代MySQL存储失败计数,性能更高)
最佳实践总结(Checklist)
- [x] 密码使用BCrypt/Argon2加密。
- [x] 所有非公开接口强制Bearer Token或Session验证。
- [x] Token设置合理的过期时间,并支持刷新和撤销。
- [x] 重要操作启用MFA二次验证。
- [x] 登录失败有熔断/限流机制。
- [x] 全站开启HTTPS,Cookie设置HTTP Only + Secure。
- [x] 无明文密码泄露(日志、数据库、返回体)。
- [x] 修改密码/重置密码后,强制失效所有旧会话。
- [x] 依赖库定期更新,无高危CVE漏洞。
工具推荐(Java生态)
- 认证框架:Spring Security, Apache Shiro, Sa-Token。
- 密码加密:Spring Security Crypto (Bouncy Castle Provider)。
- JWT库:io.jsonwebtoken (jjwt), auth0/java-jwt, nimbus-jose-jwt。
- 验证码:EasyCaptcha, Google reCAPTCHA (集成Spring Boot Starter)。
- 限流:Guava RateLimiter (单机), Redis + Lua (分布式), Sentinel。
这份规范可以作为你开发Java安全模块时的SOP或Code Review的检查依据,根据具体业务场景(如高并发、金融合规等)可以再适当增加脱敏和加密规则。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播