27

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

关于这种情况的更多信息是,最初有一个使用 cookie 作为身份验证令牌的 Web 服务器,并且由于客户端不使用它而将其设置为 httponly,因此它增加了安全性。

但是,现在需要进行更改,客户端需要知道它是否具有 cookie(因为该站点可以在没有用户登录的情况下工作,但如果他们已登录(身份验证 cookie 将存在)该站点需要显示某些东西和隐藏别人。

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

4

4 回答 4

40

如果无法设置,您可以通过尝试使用 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;
  return document.cookie.indexOf(cookiename + '=') == -1;
}
于 2017-10-26T15:05:16.780 回答
21

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

于 2020-09-14T03:55:23.940 回答
9

不,请参阅下面 Rob 的评论。

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

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

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

于 2012-02-19T22:00:16.300 回答
6

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

另一方面,如果 cookie 存在,它将由浏览器自动发送并产生200 OK响应。

于 2020-08-28T17:03:52.317 回答