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 的加固效果抹掉。