如何在单页应用程序中计算或处理 cookie 的缺失路径属性?

问题描述 投票:0回答:1

RFC6265 说的是

如果服务器省略 Path 属性,则用户代理将使用 request-uri 路径组件的“目录”作为默认值。

虽然它谈论的是

Set-Cookie
的事情,但它也适用于
document.cookie
API。要验证这一点,可以在 Chrome 上打开新选项卡并输入“https://github.com/pulls/review-requested”。网页加载完成后,打开开发控制台,输入以下代码并输入:

document.cookie = "mycookie=114514"

cookie1

开发控制台中的应用程序选项卡显示 cookie 是使用路径“/pulls”创建的,这正是 RFC6265 中提到的。但如果涉及到SPA就显得有点复杂了(虽然github确实是用react写的)。让我们按照以下步骤操作:

  1. 打开 github.com 的新选项卡。你最好删除上面的cookie。
  2. 为了将 url 更改为“https://github.com/pulls/review-requested”无需重新加载,请单击右上角的拉取请求按钮,然后单击带有文本“审核请求”的按钮。
  3. 在开发控制台中输入
    document.cookie = "mycookie=114514"
    并检查应用程序选项卡中的值。

此时,创建的 cookie 的根路径为“/”,即使 Chrome 的地址栏填满了 https://github.com/pulls/review-requested .

cookie2

这似乎与 RFC6265 不同。我在 Firefox 上尝试过,它的行为与 Chrome 相同。我无法弄清楚以下问题:

  1. 如何通过
    document.cookie
    API 计算或处理 cookie 的缺失路径属性?
  2. 有没有文章记录cookie的路径计算方式?
javascript html google-chrome http cookies
1个回答
0
投票

从理论上讲,它在规格范围内工作。正如您所指出的,浏览器将设置 request-uri 的 路径组件的路径。由于浏览器没有发出 SPA 请求,因此请求 uri 的路径组件仍然是 '/'。

这具有安全性优势,例如,此逻辑将使 XSS 攻击无法使用 History API 来更改路径并获取对当前路径之外的 cookie 的访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.