ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 JavaScript 读取 HttpOnly cookie

编辑

“安全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”标志。就目前而言,问题似乎与“安全”标志有关。

J
Jason Harrison

设置了不同的浏览器 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 techniqueXHR 不能轻易绕过。


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

HttpOnly cookie 的全部意义在于 JavaScript 无法访问它们。

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


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

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


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