全部指南
严重程度:高危Cookie 安全

Secure、HttpOnly 和 SameSite cookie 标志

会话 cookie 是重点攻击目标。Secure、HttpOnly 和 SameSite 这三个属性决定了攻击者能否窃取或滥用它们。缺失这些标志会直接导致会话劫持和 CSRF。

这是什么

Secure 只让 cookie 通过 HTTPS 发送。HttpOnly 让它对 JavaScript(document.cookie)不可见。SameSite 控制它是否随跨站请求一起发送。

三者结合能缩小攻击面:攻击者无法通过注入的脚本读取 cookie,无法在 HTTP 上嗅探它,也无法从另一个网站借用它。

为什么重要

没有 HttpOnly,任何 XSS 漏洞都能读取会话 cookie,把一个已登录的会话拱手交给攻击者。没有 Secure,cookie 会在任何明文 HTTP 请求中泄露。

没有 SameSite,浏览器会把 cookie 附加到跨站请求上,而这正是 CSRF 攻击所依赖的机制。

如何修复

给会话 cookie 同时设置这三个标志

大多数框架在你设置 cookie 时都会以选项的形式暴露这些设置。

res.cookie("session", token, {
  secure: true,
  httpOnly: true,
  sameSite: "lax", // or "strict" for maximum protection
  path: "/",
});
使用 cookie 名称前缀

把 cookie 命名为 __Host- 开头,会强制浏览器要求 Secure、Path=/ 且不带 Domain——这是会话 cookie 一个强健、自我约束的基线。

记住 SameSite=None 需要 Secure

如果你确实需要跨站 cookie,SameSite=None 只有在同时设置了 Secure 时才会生效;否则现代浏览器会丢弃该 cookie。

常见问题

SameSite 用 Lax 还是 Strict?

Lax 是一个安全的默认值,仍允许顶层导航。Strict 更严格,但可能破坏那些用户从外部链接进入却期望已登录的流程。

这些标志能阻止 XSS 吗?

HttpOnly 通过隐藏 cookie 来限制 XSS 造成的损害,但它并不能阻止 XSS。请搭配一个强健的 Content-Security-Policy。

你的应用受影响了吗?

AppSafe 一次免费扫描,就能检查这个问题以及数十项其他问题。

免费扫描我的应用