如何使用 JavaScript 读取 HttpOnly cookie

剪辑

人们对“ 安全 cookie”的理解是模棱两可的。澄清一下:

  1. 安全是通过 Https://协议发送的。Cookie 是以明文形式发送的 没有。被称为“安全旗”

  2. 中运行的 Javascript 不能读取安全的 cookie 浏览器ー即。 document.cookie无法工作。称为“ HttpOnly”标志。

这个编辑是为了澄清,原来的问题是问关于第二种情况。


原始问题

有没有办法用 JavaScript 读取安全 cookie?
我尝试使用 document.cookie来做到这一点,就我在 本文介绍了安全 cookie 和 HttpOnly 标志上看到的而言,我无法以这种方式访问安全 cookie。

有人能提出一个解决办法吗?

200677 次浏览

HttpOnly cookie 的全部意义在于它们不能被 JavaScript 访问。

让脚本读取 cookie 值的唯一方法(除了利用浏览器 bug)是在服务器上有一个合作脚本,它将读取 cookie 值并将其作为响应内容的一部分回显。但是如果您可以并且愿意这样做,为什么一开始要使用 HttpOnly cookie 呢?

设置了不同的浏览器 启用不同的安全措施时,HTTPOnly标志。例如 Opera 和 Safari 并不阻止 javascript 写入 cookie。然而,在所有主流浏览器的最新版本中,阅读总是被禁止的。

但是更重要的是 为什么你想读 HTTPOnly曲奇吗?如果您是开发人员,只需禁用该标志,并确保您测试了 xss 代码。我建议您尽可能避免禁用此标志。应该始终设置 HTTPOnly标志和“安全标志”(强制通过 https 发送 cookie)。

如果你是一个 袭击者,那么你想要 劫持会议。但是,有一个简单的方法劫持一个会话,尽管 HTTPOnly标志。您仍然可以在不知道会话 ID 的情况下使用会话。MySpace 萨米虫就是这么做的。它使用 XHR读取 CSRF令牌,然后执行授权任务。因此,攻击者可以做几乎任何登录用户可以做的事情。

人们太相信 HTTPOnly的旗帜了,XSS仍然可以被利用。应该在敏感特性周围设置屏障。如更改密码文件应要求当前密码。管理员创建新帐户的能力应该需要验证码(captcha) ,这是一个 CSRF 预防技术,不能用 XHR轻易绕过它。

不能。 Httponly cookie 的用途是不能被脚本访问。