WAF 防护73 条

Cookie 安全属性

为会话 Cookie 配置 Secure、HttpOnly 与 SameSite,降低被脚本读取与跨站携带的风险。

安全设备配置速查安全更新于 2026-10-13

会话 Cookie 的三个属性

Web 会话通常靠 Cookie 维持登录状态,攻击者拿到 Cookie 基本等同于拿到登录态。Secure、HttpOnly、SameSite 是三个能显著提高窃取门槛的属性:Secure 限制 Cookie 只在 HTTPS 上传输,HttpOnly 禁止 JavaScript 读取,SameSite 限制跨站请求是否携带该 Cookie。它们由应用响应头或反向代理设置,不是 WAF 独有的功能。

基本信息

Secure仅通过 HTTPS 传输,明文 HTTP 请求中不发送
HttpOnly禁止脚本读取,降低 XSS 直接窃取会话的风险
SameSiteLax/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脚本读取 CookieXSS 可直接读取会话并接管账号
SameSite=Lax跨站请求携带CSRF 类攻击更容易生效
SameSite=None需与 Secure 搭配缺 Secure 时浏览器丢弃 Cookie,登录态异常
设置完要在浏览器里确认响应头,而不是只看配置文件:源站 Set-Cookie 与代理改写冲突时,最终生效的是后写入的那一层。
SameSite=Strict 会让外部站点跳转进来的首个请求不带 Cookie,嵌入第三方页面的登录态可能失效,改动前先评估业务跳转链路。

易错点

  • 只加 HttpOnly 不修 XSS:脚本虽然读不到 Cookie,仍可在页面内发起请求完成操作,会话风险依旧存在
  • 嵌入第三方页面的 Cookie 用 Strict:从外部跳转进站点时登录态丢失,用户被反复要求重新登录
  • SameSite=None 未配 Secure:浏览器直接丢弃 Cookie,表现为登录态随机失效且排查方向容易走偏
  • 应用与代理两层同时设置属性:Set-Cookie 冲突,实际生效值与预期不一致

数据来源与参考

  • RFC 6265(HTTP 状态管理机制)
  • OWASP 会话管理备忘
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌