认证回答“你是谁”,授权回答“你能做什么”;真正的漏洞经常藏在两者交接处。
登录页只有两个输入框,但一套可靠的认证系统要处理凭证、会话、跨站请求、过期、撤销和异常状态。与其背诵漏洞名称,不如从浏览器与服务器交换的每一个状态开始。
01把流程拆成四种状态
- 未认证:浏览器没有可被服务器信任的会话标识。
- 建立会话:凭证校验通过,服务器创建或签发新的身份状态。
- 持续访问:浏览器在后续请求中自动或主动携带状态。
- 状态终止:退出、过期、改密或风控事件让旧状态失效。
02Cookie 的便利也是攻击面的来源
浏览器自动携带 Cookie,这让会话体验很自然,也意味着跨站页面可能诱导浏览器带着身份发出请求。SameSite、CSRF Token 与 Origin 校验是在不同层面对这一行为施加约束。
Set-Cookie: session=<opaque-id>;
Path=/;
HttpOnly;
Secure;
SameSite=Lax03用威胁模型替代属性清单
安全属性不是越多越好,而是要对应具体威胁。HttpOnly 限制脚本读取 Cookie,却不能修复所有 XSS 后果;SameSite 降低部分跨站请求风险,也不能替代服务端的授权。知道一个控制措施不解决什么,和知道它解决什么同样重要。