即使使用 httpOnly 使用 cookie 编辑器,我仍然可以编辑 cookie

Posted

技术标签:

【中文标题】即使使用 httpOnly 使用 cookie 编辑器,我仍然可以编辑 cookie【英文标题】:I can still edit cookie even with httpOnly using cookie editor 【发布时间】:2021-09-20 17:19:18 【问题描述】:

有人告诉我,将httpOnly:true 放在 cookie 上会阻止浏览器编辑 cookie,但我仍然可以在本地服务器上编辑它。

这是我目前每次制作 cookie 时所拥有的内容

res.cookie("jwt", token, 
  expires: new Date(
    Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
  ),
  httpOnly: true, // cannot be modified by the browser
);

【问题讨论】:

仅 HTTP 的 cookie 阻止 javascript 修改 cookie,不是 浏览器。 如果它只是阻止 javascript,那么如果我可以使用那个 cookie 编辑器工具,那么拥有它有什么意义(而不是试图听起来充满敌意哈哈)? 通常,想要弄乱您的网站及其客户端的攻击者将使用 JavaScript(例如 XSS),因为没有办法使用 浏览器 来弄乱网站的客户(在不同的机器+浏览器上)。攻击者修改他们的浏览器上的cookies,合法的客户端修改他们自己的cookies也是没有意义的。 好的,谢谢,如果你想回答我很乐意接受的点:) 【参考方案1】:

根据规范(rfc6265),用户代理(即浏览器)must not allowscripts在页面中访问标记为httpOnly的cookies。这并不意味着浏览器本身可能无法访问 - 实际上这是不可能的,因为浏览器必须发送带有请求的 cookie。如果您控制浏览器(在您自己的浏览器的情况下这样做),那么您作为用户可以完全控制存储在该浏览器中的任何数据,包括具有任何属性的任何 cookie。

这是许多安全漏洞的重点。作为恶意用户,您可以尝试编辑存储在浏览器中的值,以绕过 Web 应用程序中糟糕的访问控制,例如更改 ID 等以访问开发人员不希望您访问的数据。由于这很容易实现(从客户端接收到的数据可能会被客户端本身篡改),因此所有授权(访问控制)决策都必须在服务器上做出。

那么,httpOnly 的意义何在?在一类攻击中,攻击者的目标是以某种方式将 javascript 注入应用程序页面(请参阅跨站点脚本,XSS)。原因是即使攻击者以某种方式让用户访问他们的恶意网站,攻击者网站上运行的 javascript 也无法访问另一个应用程序(源)存储的信息(例如 cookie)。因此,为了访问这些信息,攻击者必须在应用程序页面上运行 javascript,如果应用程序容易受到 XSS 攻击,这实际上是可能的。

所以在 XSS 的情况下,攻击者编写 javascript,将其注入应用程序页面,当合法用户访问该页面时,受害者将在应用程序上下文中运行攻击者的 javascript。这允许攻击者访问用户有权访问的任何应用程序信息,可能最重要的是身份验证 cookie。如果攻击者获得了身份验证令牌(传统上来自 cookie),他们可能只是冒充受害者进入应用程序。

这被 httpOnly 阻止了。如果 cookie 被标记为 httpOnly,则 javascript(包括网站的合法 javascript 和攻击者的恶意 javascript)将无法访问。这可以防止攻击者通过 XSS 破坏存储在 httpOnly cookie 中的数据。

请注意,XSS 仍然是一个问题,攻击者仍然可以提取信息,这根本无法阻止 XSS。这只是意味着存储在此类 cookie 中的任何数据都不会受到损害,但可能会有更多的数据受到损害。

还请注意,正如您正确观察到的那样,这不会阻止您编辑自己的 cookie - 再次强调,目的不是消息身份验证。如果应用程序需要,它可以出于不同的原因对自己的 cookie 进行身份验证和/或加密,一些框架实际上这样做是为了无状态但仍然安全地存储会话信息。但这与 httpOnly 的作用无关。

【讨论】:

【参考方案2】:

这只是一个标志,使客户端脚本(例如 JavaScript 代码)无法访问 cookie。使用开发者工具访问像 cookie 这样的资源不是一回事。

【讨论】:

确实被几乎所有browsers 支持,因为它是任何浏览器中的基本安全功能之一。 是的,我的立场是正确的。它确实得到了所有主要浏览器的支持。我已经更新了我的评论。谢谢。

以上是关于即使使用 httpOnly 使用 cookie 编辑器,我仍然可以编辑 cookie的主要内容,如果未能解决你的问题,请参考以下文章

使用HttpOnly阻止cookie盗窃

在 codeigniter 中使用 HTTPOnly 标志设置 cookie

使用 CSRF_COOKIE_HTTPONLY 将 Django CSRF 令牌传递给 Angular

如何使用 JavaScript 读取 HttpOnly cookie

如何使用 PHP 或 JS 使用 HttpOnly 删除 cookie

用javascript能不能提取httponly属性的cookie