如何使用 JavaScript 读取 HttpOnly Cookie

2022-08-30 04:43:10

编辑

安全cookie”的含义是模棱两可的。澄清:

  1. 通过 https:// 协议发送的安全 - 即。Cookie 不是以明文形式发送的。称为“安全标志”

  2. 在cookie中安全,不能被浏览器中运行的Javascript读取 - 即。 将不起作用。称为“HttpOnly”标志。document.cookie

这个编辑是为了澄清原来的问题是在第二个案例中提出的。


原始问题

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

任何人都可以建议解决方法吗?


答案 1

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

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

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

人们对旗帜过于信任,XSS仍然可以被利用。您应该围绕敏感要素设置障碍。如更改密码归档时应要求当前密码。管理员创建新帐户的能力应该需要验证码,这是一种CSRF预防技术,不能通过XHR轻松绕过。HTTPOnly


答案 2

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

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