TL;DR / 核心结论

认证回答“你是谁”,授权回答“你能做什么”;真正的漏洞经常藏在两者交接处。

登录页只有两个输入框,但一套可靠的认证系统要处理凭证、会话、跨站请求、过期、撤销和异常状态。与其背诵漏洞名称,不如从浏览器与服务器交换的每一个状态开始。

01把流程拆成四种状态

  • 未认证:浏览器没有可被服务器信任的会话标识。
  • 建立会话:凭证校验通过,服务器创建或签发新的身份状态。
  • 持续访问:浏览器在后续请求中自动或主动携带状态。
  • 状态终止:退出、过期、改密或风控事件让旧状态失效。

浏览器自动携带 Cookie,这让会话体验很自然,也意味着跨站页面可能诱导浏览器带着身份发出请求。SameSite、CSRF Token 与 Origin 校验是在不同层面对这一行为施加约束。

一个更稳妥的会话 Cookie 起点HTTP
Set-Cookie: session=<opaque-id>;
  Path=/;
  HttpOnly;
  Secure;
  SameSite=Lax

03用威胁模型替代属性清单

安全属性不是越多越好,而是要对应具体威胁。HttpOnly 限制脚本读取 Cookie,却不能修复所有 XSS 后果;SameSite 降低部分跨站请求风险,也不能替代服务端的授权。知道一个控制措施不解决什么,和知道它解决什么同样重要。