【问题标题】:How do I destroy an http-only cookie while a server is offline?如何在服务器离线时销毁 http-only cookie?
【发布时间】:2015-07-07 01:55:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • 在公共计算机上,用户至少应该使用私人浏览器选项卡/窗口......但是在假设他们不可能都具备足够的知识来应用至少这些基本措施的假设下,我会检查注销请求是否成功,并提醒他们它不起作用。
  • 另外,减少会话生命周期可能有助于防止最坏的情况发生。如果您想在一段时间内“ping”服务器以保持会话处于活动状态,以免给可能在包含大量内容的页面上逗留更长时间的普通用户带来不便,那么当注销失败时应该停止该操作。 (如果它因为没有连接而失败,那么这并不重要,但可能还有其他原因。)您也可以提供缩短会话生命周期作为可选功能,比如说“我正在记录从公共计算机进入”登录表单中的复选框……
  • 感谢 cmets 的帮助。

标签: javascript rest security httpcookie


【解决方案1】:

如果我的任务是这样的,并且停机时间是给定的,我可能会做一些事情,比如添加第二个 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 签名,您的服务器将丢弃它并强制用户启动新会话.

【讨论】:

    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2011-01-05
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多