如何在服务器离线时销毁仅 http 的 cookie?

Jos*_* Mc 7 javascript security rest httpcookie

我有一个通过 REST 与 Web 服务器通信的 Web 应用程序,该 Web 应用程序可以在公共计算机上运行,​​并允许多个用户在给定的时间段内登录和注销。

所有 cookie 都是 HTTP-only,这只是一种额外的安全措施,以涵盖成功的 XSS 攻击案例。这意味着必须进行 REST 调用以强制注销。

我担心的是,当网络服务器因任何原因出现故障时(或变得无法访问,例如某处网络电缆断开连接)。当用户点击注销时,实际上无法删除 cookie。这意味着用户可能会离开 PC,同时当连接恢复或服务器恢复时另一个用户可能会出现,并继续使用以前的用户帐户。

处理这个用例的典型方法是什么?(诚​​然不是特别常见)。

Chr*_*ald 9

如果我的任务是这样的,并且停机时间是给定的,我可能会做一些事情,比如添加第二个 cookie,可通过 JS 修改(我们称之为 cookiever),其中将包含一些用作部分的值http cookie 上的 HMAC 签名,即(伪代码):

cookiever ||= random
cookie_signature = hex_hmac_sha256(cookie_data + cookiever, "signing_secret")
httponlycookie = urlsafe_base64(cookie_data) + "|" + cookie_signature
set_cookie("httponly", httponlycookie, httponly=True)
set_cookie("cookievew", cookiever)
Run Code Online (Sandbox Code Playgroud)

通常,cookiever 将与 httponly cookie 一起由服务器设置,用于验证每个请求的 cookie。如果用户请求注销,那么您将使用 Javascript 向 cookiever 写入一个空值,从而破坏 cookie 中的签名信息。因此,即使 httponly cookie 无法销毁,cookiever cookie 也会销毁,并且在下一次成功请求时,httpcookie 将无法验证其 HMAC 签名,您的服务器将丢弃它并强制用户开始新会话.