首页/安全/漏洞与攻击面速查/Cookie 安全属性配置
Web 漏洞原理与防护55 条

Cookie 安全属性配置

给会话与敏感 Cookie 配齐属性是低成本的安全加固:HttpOnly 防脚本读取、Secure 限 HTTPS、SameSite 缓解跨站、Domain 与 Path 收窄作用范围,并控制生命周期。

漏洞与攻击面速查安全更新于 2026-10-13

Cookie 安全属性是什么

Cookie 属性是浏览器执行的一组约束,用来限制 Cookie 能被谁读取、以什么协议传输、在哪些请求中发送、作用域有多宽、存活多久。它们是成本最低的一层加固:不改变业务逻辑,只改响应头即可收窄攻击面。属性之间存在耦合,例如 SameSite=None 必须搭配 Secure,同名 Cookie 重复下发时属性会互相覆盖,这些都决定了配置要成套核对而不是逐项勾选。

基本信息

下发方式HTTP 响应头 Set-Cookie
核心属性HttpOnly / Secure / SameSite / Domain / Path / Max-Age
典型场景会话 Cookie、CSRF 令牌 Cookie、偏好设置 Cookie
核查方式curl -sI 查看响应头,或浏览器开发者工具 Application 面板

属性与建议

属性作用建议
HttpOnly禁止脚本读取会话与令牌 Cookie 全部开启
Secure仅通过 HTTPS 传输全站 HTTPS 后开启
SameSite限制跨站携带Lax 起步,管理后台可 Strict
Domain限定作用域不设置则收窄到当前域,避免整域泛共享
Path限定路径按功能分组,减少无关路径携带
Expires / Max-Age生命周期会话类用会话 Cookie 或短周期

典型使用场景

  • 上线前做安全检查单,逐项核对会话 Cookie 的属性组合
  • 排查登录态被脚本窃取:确认是否缺少 HttpOnly
  • 共用域下多个子系统互相干扰时,用 Path 与 Domain 划清边界
  • HTTP 与 HTTPS 双协议并存阶段,先上 Secure 再逐步关停 HTTP
  • 做 Cookie 属性基线巡检:批量抓取各站点响应头,找出缺属性的接口

下发与核查

下发与核查
# 会话 Cookie:属性成套下发
Set-Cookie: sid=abc123; Path=/; Secure; HttpOnly; SameSite=Lax; Max-Age=3600

# 生效作用域的取舍:
# 不写 Domain  -> 仅当前主机名可用(更安全)
# 写 Domain=.example.com -> 所有子域共享(范围更大)

# 核查线上实际下发(含多域名与重定向):
# curl -sI https://example.com/login | grep -i set-cookie
# curl -sI -L https://example.com/ | grep -i set-cookie
子域众多且需要共享登录态时,评估使用独立认证域集中管理会话,避免把 Domain 设成整域泛共享而把风险扩散到全部子系统。
同名 Cookie 被多处下发时,属性以最后一次设置为准:某接口漏写 HttpOnly 或 Secure,就可能把整条会话 Cookie 的加固效果抹掉。

易错点

  • 同名 Cookie 在不同接口下发且属性不一致:属性以最后一次为准,原有加固被静默覆盖
  • 只给主域名配属性,子域接口另发一份不带属性的 Cookie:攻击面从子域绕回主域
  • Domain 设为顶级域泛共享:任一子域存在 XSS 即可读取主站会话
  • 误以为设置了 HttpOnly 就能防 XSS:它只阻止脚本读取 Cookie,页面内仍可发起带凭据的请求

数据来源与参考

  • MDN Set-Cookie 文档
  • OWASP Session Management Cheat Sheet
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌