HTTP、会话与 Cookie

security OpenTrojan Threat Intelligence

Web 如何在无状态的 HTTP 之上维持状态(Cookie、会话),以及保护会话完整性与机密性的安全属性。

快速解答

HTTP 是无状态的,因此会话与 Cookie 补充了身份;使用 Secure、HttpOnly、SameSite 属性、短生命周期以及服务端会话验证来保护它们,以防止会话劫持和 CSRF。

定义

HTTP 是无状态协议;会话与 Cookie 承载身份/状态,使一系列请求可被视为一次已认证的对话,而这正是攻击者频繁瞄准的目标。

它是什么

HTTP 在请求之间没有记忆。会话提供连续性:服务器签发一个会话标识符(通常是 Cookie,RFC 6265),客户端在每次请求时出示它,使服务器将这一系列请求视为一次已认证的对话。

为什么重要

由于会话 Cookie 实际上就是用户对服务器的身份凭证,窃取或固定它便是通往账户接管的直接路径。锁定 Cookie 的属性决定了令牌是可被劫持的还是安全的。

它如何工作

  • Cookie 属性:Secure(仅通过 HTTPS,参见 security:tls)、HttpOnly(脚本无法访问,削弱 XSS 窃取)、SameSite(缓解 CSRF),以及 Path/Max-Age 作用域限定。
  • 服务端会话:在服务器上验证会话状态;在登出、空闲超时和权限变更时使其失效;绝不单独信任客户端的声明。
  • 无状态 vs 服务端会话:JWT 是一种无状态的令牌替代方案(参见 security:oauth-saml-sso / guides:decode-jwt-safely),它转移了验证位置,但并未转移被窃取的风险。

检测

  • 同一账户突现来自不同地理区域/地点的并发会话。
  • 敏感端点上缺少 Secure/HttpOnly/SameSite 的 Cookie。
  • 会话标识符从异常的用户代理/IP 历史中被重放。

缓解

  • 为会话 Cookie 设置 Secure、HttpOnly、SameSite=Lax/Strict 以及短且轮换的生命周期。
  • 将会话绑定到服务端存储;记录轮换/失效事件。
  • 添加 CSRF 防御(令牌、SameSite、自定义头),而不是仅依赖 Cookie。

调查

在会话劫持或账户接管调查中,比较签发的会话与出示的会话、IP/地点历史,以及托管端点上的 Cookie 属性状态。对端点进行安全头审查是首要检查(guides:tool-headers-guide)。

参考资料

还有后续问题?

向 OpenTrojan 证据驱动的助手询问本主题——回答会引用其来源。

就此向 AI 提问 发起调查