会话 Cookie 的三个属性
Web 会话通常靠 Cookie 维持登录状态,攻击者拿到 Cookie 基本等同于拿到登录态。Secure、HttpOnly、SameSite 是三个能显著提高窃取门槛的属性:Secure 限制 Cookie 只在 HTTPS 上传输,HttpOnly 禁止 JavaScript 读取,SameSite 限制跨站请求是否携带该 Cookie。它们由应用响应头或反向代理设置,不是 WAF 独有的功能。
基本信息
| Secure | 仅通过 HTTPS 传输,明文 HTTP 请求中不发送 |
|---|---|
| HttpOnly | 禁止脚本读取,降低 XSS 直接窃取会话的风险 |
| SameSite | Lax/Strict/None 控制跨站请求是否携带该 Cookie |
| 设置位置 | 应用响应头 Set-Cookie,或反向代理统一改写 |
典型使用场景
- 新站点上线:把会话 Cookie 属性纳入安全基线检查
- XSS 事件后加固:HttpOnly 能降低会话被直接窃取的危害
- 第三方嵌入场景:评估 SameSite=None 与 Secure 的组合是否必要
- 代理改造:源站未设置属性时,用 nginx 或 WAF 统一补齐
- 渗透测试整改:报告中 Cookie 缺失属性项按此整改并复测
nginx 改写示例
nginx 改写示例
# 为源站未设置安全属性的 Cookie 统一补齐
proxy_cookie_path / "/; Secure; HttpOnly; SameSite=Lax";
# 需要跨站携带的 Cookie 单独处理(例如第三方支付回跳)
# SameSite=None 必须同时带 Secure,否则浏览器直接丢弃该 Cookie
# 改完在浏览器开发者工具中确认响应头实际生效,而不是只看配置
# 先灰度一个域名验证登录与跳转正常,再全量推广属性与风险对照
| 属性 | 防的是什么 | 不设置会怎样 |
|---|---|---|
| Secure | 明文链路上的窃听 | HTTP 请求中携带 Cookie,链路可嗅探即泄露 |
| HttpOnly | 脚本读取 Cookie | XSS 可直接读取会话并接管账号 |
| SameSite=Lax | 跨站请求携带 | CSRF 类攻击更容易生效 |
| SameSite=None | 需与 Secure 搭配 | 缺 Secure 时浏览器丢弃 Cookie,登录态异常 |
设置完要在浏览器里确认响应头,而不是只看配置文件:源站 Set-Cookie 与代理改写冲突时,最终生效的是后写入的那一层。
SameSite=Strict 会让外部站点跳转进来的首个请求不带 Cookie,嵌入第三方页面的登录态可能失效,改动前先评估业务跳转链路。