如何使用 JavaScript 读取 HttpOnly cookie

Posted

技术标签:

【中文标题】如何使用 JavaScript 读取 HttpOnly cookie【英文标题】:How to read a HttpOnly cookie using JavaScript 【发布时间】:2011-12-25 05:53:50 【问题描述】:

编辑

安全 cookie”的含义并不明确。澄清一下:

    与通过 https:// 协议发送时一样安全 - 即。 cookie以明文形式发送。被称为“安全标志”

    在 cookie 中运行的 javascript 无法读取安全 浏览器——即。 document.cookie 将不起作用。称为“HttpOnly”标志。

此编辑是为了澄清最初的问题是关于第二种情况。


原始问题

有什么方法可以使用 JavaScript 读取安全 cookie? 我尝试使用document.cookie 进行此操作,据我在this article about secure cookies and HttpOnly flag 上看到的,我无法以这种方式访问​​安全cookie。

任何人都可以提出解决方法吗?

【问题讨论】:

来自wiki:安全cookie仅在浏览器通过HTTPS访问服务器时使用。 @Pavel Hodek 这是错误的标志。 “安全”cookie 标志与 HTTPOnly 安全标志无关。他们有一个糟糕的命名系统。 这个问题的标题应该更改为包含“HttpOnly”标志。就目前而言,问题似乎与“安全”标志有关。 【参考方案1】:

设置了不同的浏览器enable different security measures when the HTTPOnly 标志。例如 Opera 和 Safari 不会阻止 javascript 写入 cookie。但是,所有主流浏览器的最新版本始终禁止阅读。

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

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

人们对HTTPOnly 标志过于信任,XSS 仍然可以被利用。您应该围绕敏感功能设置障碍。如更改密码字段应要求当前密码。管理员创建新帐户的能力需要验证码,即 CSRF prevention technique,XHR 无法轻易绕过。

【讨论】:

你能详细说明一下蠕虫的事情吗?该链接不起作用,并且从互联网上也没有真正了解太多。谢谢。 @Abhishek Jebaraj 如果您不了解 sammy 蠕虫或 CSRF 令牌,请先尝试了解 same-origin policy 的限制 我想获取一个 http only cookie 的到期日期,我该怎么做【参考方案2】:

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

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

【讨论】:

在允许用户从特定浏览器使用您的网站之前,您可能需要对其进行测试以了解用户浏览器是否正确处理 HttpOnly 的 cookie。我正在寻找一个可以确保浏览器支持 HttpOnly 标志的示例。 MS 也建议这样做,但没有关于如何做的进一步建议:Mitigating XSS with HttpOnly 我发现他们建议浏览器版本白名单。我可能是错的,但它不是检查javascript支持的便捷方法吗?你能建议这方面的任何缺点吗?【参考方案3】:

你不能。脚本无法访问 Httponly cookie 的目的。

【讨论】:

您的答案与现有答案相比有什么新的或不同的地方??? 同上一个答案的第一句话:The whole point of HttpOnly cookies is that they can't be accessed by JavaScript. @Akin Zeman:无需使用尖叫帽。您可能想深入了解非暴力沟通。

以上是关于如何使用 JavaScript 读取 HttpOnly cookie的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Javascript读取本地文本文件并逐行读取?

如何使用 Selenium 读取 javascript 变量?

如何使用纯 JavaScript 读取图像文件?

如何使用 JavaScript 在 NativeScript 中读取 CSS 变量

如何通过 Javascript 读取元数据内容? [复制]

如何使用JavaScript读取Excel文件(不使用ActiveXObject)