如何在服务器离线时销毁仅 http cookie?
How do I destroy an http-only cookie while a server is offline?
我有一个通过 REST 与网络服务器对话的网络应用程序,这个网络应用程序可以在 public 计算机上 运行 并允许多个用户在给定时间内登录和注销期间。
所有 cookie 都是 HTTP 专用的,这只是一种额外的安全措施,以涵盖成功的 XSS 攻击案例。这意味着必须进行 REST 调用以强制注销。
我担心的是,当网络服务器因任何原因出现故障时(或变得无法访问,例如网络电缆在某处断开连接)。当用户点击注销时,实际上没有办法删除 cookie。这意味着用户可能会离开 PC,同时当连接恢复或服务器恢复时另一个用户可能会出现,并继续使用以前的用户帐户。
处理这个用例的典型方法是什么? (诚然不是特别常见)。
如果我的任务是这样,并且停机是给定的,我可能会做一些事情,比如添加第二个 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)
通常情况下,cookiever 会与 httponly cookie 一起由服务器设置,用于在每次请求时验证 cookie。如果用户请求注销,那么您将使用 Javascript 向 cookiever 写入一个空值,从而破坏 cookie 中的签名信息。因此,即使无法销毁 httponly cookie,cookiever cookie 也会在下一次成功请求时,httpcookie 无法验证其 HMAC 签名,您的服务器将丢弃它并强制用户开始新会话.
我有一个通过 REST 与网络服务器对话的网络应用程序,这个网络应用程序可以在 public 计算机上 运行 并允许多个用户在给定时间内登录和注销期间。
所有 cookie 都是 HTTP 专用的,这只是一种额外的安全措施,以涵盖成功的 XSS 攻击案例。这意味着必须进行 REST 调用以强制注销。
我担心的是,当网络服务器因任何原因出现故障时(或变得无法访问,例如网络电缆在某处断开连接)。当用户点击注销时,实际上没有办法删除 cookie。这意味着用户可能会离开 PC,同时当连接恢复或服务器恢复时另一个用户可能会出现,并继续使用以前的用户帐户。
处理这个用例的典型方法是什么? (诚然不是特别常见)。
如果我的任务是这样,并且停机是给定的,我可能会做一些事情,比如添加第二个 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)
通常情况下,cookiever 会与 httponly cookie 一起由服务器设置,用于在每次请求时验证 cookie。如果用户请求注销,那么您将使用 Javascript 向 cookiever 写入一个空值,从而破坏 cookie 中的签名信息。因此,即使无法销毁 httponly cookie,cookiever cookie 也会在下一次成功请求时,httpcookie 无法验证其 HMAC 签名,您的服务器将丢弃它并强制用户开始新会话.