为什么document.cookie不显示该网站的所有cookie?


77

我去了一个使用vBulletin 3.8的论坛。登录时,我使用Firebug查看设置了哪些Cookie。我看到这些cookie:

__utmb,__ utmc,__ utma,__ utmz,bbsessionhash,vbseo_loggedin,bbpassword,bbuserid,bblastactivity,bblastvisit

它们都有一个值集,并且域是相同的。

但是,当我使用JavaScript查看它们时,它仅看到以下cookie:

__utmb,__ utmc,__ utma,__ utmz,vbseo_loggedin,bblastactivity,bblastvisit

在萤火虫中,我只看到这三个cookie:bbsessionhash,bbpasword和bbuserid,它们是实际设置的。HTTPOnly列中的HTTPOnly。这是什么意思,是为什么我无法使用JavaScript在Cookie中看到这些cookie document.cookie

Answers:


119

来自http://en.wikipedia.org/wiki/HTTP_cookie

如果Cookie是使用HttpOnly标志发送的,则它们对客户端程序(例如JavaScript)不直接可见。从服务器的角度来看,与常规情况唯一的区别是,在set-cookie标头行中添加了一个新字段,其中包含字符串`HttpOnly':

Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.example.net; HttpOnly

当浏览器收到这样的cookie时,应该在以下HTTP交换中照常使用它,而不是使其对客户端脚本可见。 HttpOnly标志不是任何标准的一部分,并且并非在所有浏览器中都实现。

从2017年开始更新:自2009年以来已经过去了很多时间,并且HttpOnly标头标志已成为标准,在RFC6265的5.2.6节中定义,并且存储语义在同一文档中有所描述(请查找“ http-only-flag”整个RFC文本)。

没有办法对任何访问HttpOnly饼干从“非HTTP”的API,如JavaScript的。通过设计,既不能读取也不可以写入此类Cookie。


7
但是,是否可以从前端以某种方式访问​​这些cookie?Cookie管理器Chrome扩展程序显示了它们,但document.cookie没有显示。
Silver Ringvee

5
@SilverRingvee,对不起,但是没有。如果有办法,应该报告并修复这是一个浏览器安全漏洞(并且是非常严重的漏洞)。浏览器扩展是另一回事,它们具有比网站更高的特权,并且可以访问优先使用的API(例如,chrome.cookies.getAll对于Chrome),可以查看所有cookie。
drdaeman '16

@SilverRingvee,您是否找到任何使用HTTPOnly标志访问cookie的方法?
Rewanth Cool,

2
@RewanthCool和我现在已经意识到,如果可能的话,这将是一个非常糟糕的安全问题。
Silver Ringvee '17

@SilverRingvee我尝试使用XMLHTTPRequest,但是没有用。这里是参考:forums.asp.net/t/…。看一下这个 !!
Rewanth Cool
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.