如何使用JavaScript读取HttpOnly Cookie


90

有没有办法用JavaScript读取安全的cookie?
我尝试使用来做到这一点document.cookie,据我在本文中关于安全cookie和HttpOnly标志所看到的,我无法以这种方式访问​​安全cookie。

有人可以建议解决方法吗?


1
来自Wiki:仅当浏览器通过HTTPS访问服务器时才使用安全cookie。
Pavel Hodek

6
@Pavel Hodek这是错误的标志。“安全” cookie标志与HTTPOnly安全标志无关。他们有一个糟糕的命名系统。

1
该问题的标题应更改为包括“ HttpOnly”标志。从目前的情况来看,问题似乎与“安全”标志有关。
汤姆(Tom),

Answers:


125

设置HTTPOnly标志时,不同的浏览器将启用不同的安全措施。例如Opera和Safari不会阻止javascript写入cookie。但是,所有主要浏览器的最新版本始终禁止阅读。

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

如果您是攻击者,那么您想劫持一个会话。但是,尽管有HTTPOnly标志,也有一种简单的方法可以劫持会话。您仍然可以在不知道会话ID的情况下参加会话。MySpace Samy蠕虫正是这样做的。它使用XHR读取CSRF令牌,然后执行授权任务。因此,攻击者几乎可以执行登录用户可以执行的任何操作。

人们对HTTPOnly国旗非常有信心,XSS仍然可以被利用。您应该围绕敏感功能设置障碍。例如更改密码字段应要求使用当前密码。管理员创建新帐户的能力应要求验证码,这是一种CSRF预防技术,不能轻易通过XHR绕过。


您能详细说明一下蠕虫吗?该链接无效,对互联网的了解也不多。谢谢。
Abhishek Jebaraj

@Abhishek Jebaraj如果您不了解蠕虫或CSRF令牌,请尝试首先了解同源策略
菜鸟

我想获取仅HTTP cookie的到期日期,该怎么办
PirateApp

50

HttpOnly cookie的全部要点是,JavaScript无法访问它们。

脚本读取它们的唯一方法(利用浏览器错误除外)是在服务器上拥有一个协作脚本,该脚本将读取cookie值并将其作为响应内容的一部分回显。但是,如果可以并且愿意这样做,为什么首先要使用HttpOnly cookie?


您可能需要对其进行测试,以了解用户浏览器在允许用户从特定浏览器使用您的网站之前是否正确处理了HttpOnly cookie。我正在寻找一个可以确保浏览器支持HttpOnly标志的示例。MS也建议这样做,但是没有关于如何做的进一步建议:使用HttpOnly缓解XSS
Ursegor

我发现他们建议浏览器版本为白色。我可能是错的,但是这不是从javascript检查支持的便捷方法吗?您能对此建议一下吗?
Ursegor'Mar

-7

一种方法是使用Safari Web检查器,在“存储”选项卡中,您可以看到所有cookie(无论是否为httpOnly),只需选择Cookie Command + C即可将其复制。

获得字符串后,您可以轻松地使用任何cookie解析器或纯JavaScript解析它。

在此处输入图片说明


1
FF和Chrome也可以做到这一点。它们不是OP想要的东西。
imba-tjd

@ imba-tjd嗯,您是对的,但当时我使用的是Safari,因此可以证明这一点。
pankajdoharey

就像您回答一个询问“我如何获得用户输入”的人,“问他们然后在您的代码中进行设置”。
论坛者
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.