Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在服务器脱机时销毁仅http的cookie?_Javascript_Rest_Security_Httpcookie - Fatal编程技术网

Javascript 如何在服务器脱机时销毁仅http的cookie?

Javascript 如何在服务器脱机时销毁仅http的cookie?,javascript,rest,security,httpcookie,Javascript,Rest,Security,Httpcookie,我有一个通过REST与web服务器对话的web应用程序,这个web应用程序可以在公共计算机上运行,并允许多个用户在给定的时间段内登录和注销 所有cookie都是仅HTTP的,这只是一种额外的安全措施,用于覆盖成功的XSS攻击。这意味着必须进行REST调用以强制注销 我担心的是,当web服务器因任何原因停机(或变得无法访问,例如某个地方的网线被断开)时。当用户点击logout时,实际上无法删除cookie。这意味着用户可能会离开PC,同时,当连接恢复或服务器恢复时,另一个用户可能会出现,只需继续使

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

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

我担心的是,当web服务器因任何原因停机(或变得无法访问,例如某个地方的网线被断开)时。当用户点击logout时,实际上无法删除cookie。这意味着用户可能会离开PC,同时,当连接恢复或服务器恢复时,另一个用户可能会出现,只需继续使用以前的用户帐户即可


处理这个用例的典型方式是什么?(无可否认,这并不常见)。

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


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

在公用计算机上,用户至少应该使用一个私有浏览器选项卡/窗口……但在假设他们不可能都有足够的知识来应用至少这些基本措施的情况下,我会检查注销请求是否成功,并提醒他们注销请求不起作用。此外,缩短会话生存期可能有助于防止最坏的情况发生。如果您希望在一段时间内“ping”服务器以保持会话的活动状态,从而不会给可能在包含大量内容的页面上停留更长时间的普通用户带来不便,那么当注销失败时,应该停止该操作。(如果因为没有连接而失败,那么这没什么大不了的,但可能还有其他原因。)您还可以提供缩短会话寿命的可选功能,比如在登录表单中添加“我正在从公共计算机登录”复选框……感谢您的帮助。
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)