- 理解密码为什么必须加密存储
- 掌握 bcrypt 的作用
- 理解 Session 和 JWT 的区别
- 实现注册、登录、获取当前用户接口
- 实现鉴权中间件
- 理解 Access Token、Refresh Token、过期时间和退出登录
- 理解 401 和 403 的区别
- 理解用户、角色、权限和 RBAC
- 理解菜单权限、按钮权限和接口权限的关系
- 实现头像或文章封面上传
- 了解本地存储、对象存储、私有文件、签名 URL 的区别
- 了解 SQL 注入、XSS、CSRF、CORS、限流、敏感信息泄露
- 理解后台任务、邮件验证码、短信验证码、定时任务等常见业务能力
鉴权
JWT 登录鉴权
实现注册、登录、获取当前用户、需要登录才能访问的接口、仅管理员访问的接口。
产出物一套最小可运行的登录鉴权 API。
上传
上传文章封面
实现 multipart/form-data 文件上传,限制文件大小和类型,并返回可访问 URL。
产出物一个前端可调用的文件上传接口。
鉴权
RBAC 权限演练
实现普通用户只能看自己的数据、管理员可以管理所有数据的最小权限模型。
产出物一组普通用户和管理员访问同一接口的测试记录。
排错
安全 Review 清单
让 AI 按登录、Token、权限、上传、CORS、限流、敏感信息、错误堆栈逐项检查代码。
产出物一份上线前安全检查表。
Day 1
注册、登录和密码安全
实现最小登录闭环,并知道密码为什么不能明文保存。
- 设计 users 表,包含 email、password_hash、role、status
- 实现注册接口并使用 bcrypt 保存密码哈希
- 实现登录接口并返回 token
- 用错误密码、未注册邮箱、禁用用户测试失败响应
当天产出一套注册和登录接口。
Day 2
Token、鉴权中间件和当前用户
让后端能够识别每次请求是谁发起的。
- 实现解析 Authorization Bearer token 的中间件
- 实现 GET /me 获取当前用户
- 处理 token 缺失、过期、伪造、用户不存在的场景
- 整理前端保存和携带 token 的注意事项
当天产出一个受保护接口和 token 错误处理清单。
Day 3
RBAC 权限模型
区分登录、角色、权限、菜单显示和接口拦截。
- 设计 user、role、permission 的最小模型
- 实现管理员才能访问的接口
- 说明前端菜单权限和后端接口权限的关系
- 测试普通用户访问管理员接口时返回 403
当天产出一套最小 RBAC 权限示例。
Day 4
文件上传和对象存储
理解 multipart/form-data、文件校验、访问 URL 和对象存储的基本流程。
- 实现头像或文章封面上传接口
- 限制文件大小、扩展名和 MIME 类型
- 返回文件 URL,并记录到用户或文章表
- 了解阿里云 OSS、腾讯云 COS、S3 的签名上传思路
当天产出一个前端可调用的上传接口。
Day 5
安全和风控基础
把能跑的登录上传功能提升到可上线前检查的水平。
- 检查 SQL 注入、XSS、CSRF、CORS、限流、错误堆栈泄露
- 为登录接口增加基础限流或失败次数保护思路
- 确认密钥、数据库密码、OSS 凭证不进仓库
- 让 AI 按 OWASP 风格 Review 代码
当天产出一份登录、权限、上传和安全 Review 清单。
Day 6
异步任务和验证码认知
理解邮件、短信、图片处理、通知这些不适合阻塞接口的业务。
- 设计发送验证码或邮件通知的接口流程
- 了解队列、定时任务、重试和失败记录
- 区分同步返回成功和异步任务最终成功
- 整理哪些后端任务应该放到队列或后台执行
当天产出一份后台任务和验证码流程图。
登录和权限是后端不能只求能跑的部分。这里的错误很容易变成真实安全问题。
JWT
一种携带用户身份信息的 Token,后端用签名验证它是否可信。
前端类比:类似前端保存的一张临时通行证,请求时放在 Authorization header。
bcrypt
密码哈希算法,用来避免数据库泄露时直接暴露明文密码。
前端类比:不是加密后再解密,而是保存不可逆指纹。
RBAC
基于角色的权限控制,用角色连接用户和权限。
前端类比:类似前端根据角色控制菜单和按钮,只是后端必须真正拦截接口。
对象存储
专门保存图片、视频、附件等文件的服务,比如阿里云 OSS。
前端类比:类似静态资源 CDN,但上传、权限和访问地址由后端管理。
Access Token / Refresh Token
Access Token 用于访问接口,生命周期较短;Refresh Token 用于换取新的 Access Token,生命周期较长且更敏感。
前端类比:类似短期通行证和续签凭证,前端要按安全策略保存和刷新。
CSRF
攻击者诱导浏览器带着用户 Cookie 去请求受害网站,常见于 Cookie 鉴权场景。
前端类比:类似用户没点你页面里的按钮,却被别的页面借用了登录态发请求。
限流
限制接口在一定时间内的访问次数,保护登录、验证码、搜索、AI 调用等昂贵接口。
前端类比:类似前端防抖节流,但后端限流用于安全和成本控制。
后台任务
把发邮件、发短信、图片处理、统计计算等耗时操作放到异步队列或定时任务里执行。
前端类比:类似提交表单后先显示处理中,真正耗时工作在后台慢慢完成。
常见坑点- 不要明文保存密码
- 不要只在前端判断权限,后端接口也必须校验
- 不要把 JWT secret 写进代码仓库
- 上传文件必须限制大小和类型
- 生产环境不要直接暴露详细错误堆栈
- Refresh Token 比 Access Token 更敏感,不能随便长久暴露
- CORS 配成 * 不等于安全,带 Cookie 和鉴权时尤其要谨慎
- 上传文件不能只相信前端传来的文件名和 MIME 类型
- 验证码、登录、AI 调用等接口要考虑限流和成本
JWT 登录示例
请基于 Node.js Express 写一套 JWT 登录鉴权示例。要求注册时使用 bcrypt 加密密码,登录成功后返回 token,写一个鉴权中间件,写一个仅管理员可访问的接口,说明前端应该如何保存和携带 token,并指出这套代码上线前还需要补充哪些安全措施。
安全 Review
请从安全角度 Review 下面的后端代码。重点检查密码存储、权限绕过、SQL 注入、Token 处理、文件上传限制、错误信息泄露、CORS 配置是否存在风险。请按严重程度排序。
权限模型设计
请为下面的后台系统设计最小 RBAC 权限模型。请输出用户、角色、权限、菜单和接口权限之间的关系,给出表结构、接口鉴权流程、前端菜单控制方式,并指出哪些权限必须由后端强制校验。
文件上传方案
请为文章封面上传设计后端方案。要求说明 multipart/form-data、本地存储和对象存储的区别、文件大小和类型限制、文件命名、访问 URL、私有文件签名 URL、上传失败和清理策略,以及前端如何调用。
- 能解释注册、登录、鉴权中间件的流程
- 能区分认证和授权
- 能实现一个受保护接口
- 能实现最小 RBAC 权限校验
- 能实现带限制的文件上传接口
- 能让 AI 检查后端代码安全风险