检查Javascript中是否存在httponly cookie

Gro*_*fit 9 javascript cookies httponly

正如问题所说,如果它是HttpOnly,你能否知道Javascript中是否存在cookie?我不需要访问其中的信息,只知道它有一个.

关于这种情况的更多信息是,最初有一个使用cookie作为身份验证令牌的Web服务器,并且它被设置为httponly,因为它没有被客户端使用,所以它被添加到安全性中.

但是现在需要进行更改,客户端需要知道它是否有cookie(因为站点可以在没有用户登录的情况下工作,但如果他们已登录(auth cookie将存在),则站点需要显示某些事物和隐藏他人.

Web服务器上还有其他安全预防措施,因此在客户端具有不正确的身份验证cookie的情况下没有任何损害,但该网站使其看起来像是已登录,因为它会删除cookie并拒绝用户.

Edu*_*oço 14

我有同样的问题。我通过服务器设置另一个cookie而不是httponly来解决它,每次刷新httponly会话cookie时,使用相同的max-age并且没有敏感数据。现在,如果其中一个存在,另一个同样如此,并且客户端可以知道 httponly 对应物是否存在。

  • 这是我认为最好的答案。这也有助于防止用户突然从特定站点清除所有 cookie。 (3认同)
  • 这是最好的答案。所选答案是一个会带来新问题的黑客。 (3认同)

Anu*_*Das 13

每当您需要检查 cookie 是否存在时,您可以向需要身份验证的服务器发送请求并检查响应。如果它类似于401 Unauthorized403 Forbidden,则 cookie 可能不存在,您可以提示用户登录。

另一方面,如果 cookie 存在,浏览器会自动发送该 cookie,从而产生响应200 OK


Eri*_*sky 9

您可以通过尝试使用javascript将其设置为无法设置的值来间接检查它是否存在,然后必须存在HTTP Only Cookie(否则用户将阻止Cookie)。

function doesHttpOnlyCookieExist(cookiename) {
   var d = new Date();
   d.setTime(d.getTime() + (1000));
   var expires = "expires=" + d.toUTCString();

   document.cookie = cookiename + "=new_value;path=/;" + expires;
   if (document.cookie.indexOf(cookiename + '=') == -1) {
       return true;
    } else {
       return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

[2018年2月6日更新]在Firefox上不起作用(在Chrome&Edge上可能有效,也许在其他系统上也可以)

  • 在我看来,您不应该依赖此解决方案,因为它是一个实现细节。也许将来,主流浏览器会认为这是一个安全漏洞,从而允许两个 cookie 共存并共享相同的名称。这很可能会发生,因为浏览器已经提供了此功能。 (3认同)
  • 你介意解释这其中的哪一部分不适用于 Firefox 吗?我在 66.0.3 上,它似乎工作得很好……得到与 Chrome、Edge 和 IE11 完全相同的结果。 (2认同)

Mik*_*ike 7

不.请看下面Rob的评论.

看到这个,您可能已经看过了 - http://en.wikipedia.org/wiki/HTTP_cookie#Secure_and_HttpOnly

无法通过非HTTP方法访问HttpOnly cookie,例如通过JavaScript调用(例如,引用"document.cookie")...

编辑:删除了undefined响应,我写了一个你可能没有使用的脚本:)