如何配置浏览器跨源访问?
- CORS: 浏览器对跨源脚本请求的读取限制; 不是服务端鉴权机制;
- allow origins: 使用明确来源清单; 携带凭据时不能使用通配
*;
- allow methods/headers: 只开放实际 API 所需集合;
- preflight: 浏览器以 OPTIONS 探测; 缓存时长需要兼顾变更传播;
- Hertz 集成: 使用
hertz-contrib/cors 集中配置,不在每个 Handler 手写 Header;
如何限制 Cookie 的发送与读取?
- Cookie: 浏览器为某个站点保存的小段数据,并在符合 Domain、Path、Secure、SameSite 等条件时自动随请求发送;
Secure: 仅通过 HTTPS 发送;
HttpOnly: 阻止脚本读取,降低 Token 被 XSS 窃取的风险;
SameSite: 根据同站交互选择 Lax、Strict 或 None;
- Domain/Path: 缩小 Cookie 发送范围;
- Max-Age: 明确会话寿命和退出时的删除行为;
如何管理服务端会话?
- Session: 服务端保存的用户会话状态,浏览器通常只持有用于查找状态的随机 session ID;
- session ID: Cookie 只存随机标识,权限和业务状态存服务端;
- session store: 多实例需共享存储或明确粘性会话;
- rotation: 登录成功、权限提升后更换 session ID;
- logout: 服务端失效会话,不能只让浏览器删除 Cookie;
- Hertz 集成:
hertz-contrib/sessions 提供中间件和存储扩展;
如何防止 Cookie 登录遭到 CSRF?
- CSRF: 跨站请求伪造;攻击页面利用浏览器自动携带目标站点 Cookie 的行为,诱导用户提交修改请求;
- 风险条件: 浏览器自动携带 Cookie,恶意站点可诱导状态修改请求;
- 防护: SameSite + CSRF token + Origin/Referer 校验组合;
- Bearer Header: 非浏览器自动附带,风险模型不同,但仍需防 XSS;
- 安全方法: GET、HEAD 不执行状态修改;
- Hertz 集成:
hertz-contrib/csrf 统一 token 生成和验证;
如何避免不可信内容触发 XSS?
- XSS: 跨站脚本;不可信内容被当作脚本执行,使攻击代码在受信任站点的页面中运行;
- CSP: 内容安全策略;通过响应头限制页面允许加载或执行的脚本来源;
- 输出编码: HTML 模板按上下文转义,不拼接不可信脚本;
- JSON API: 正确 Content-Type,前端仍需安全渲染;
- CSP: 限制脚本来源,降低注入后的影响;
- HttpOnly: 只能保护 Cookie 不被读取,不能阻止恶意脚本发起请求;