为了账号安全,请及时绑定邮箱和手机立即绑定

Firefox 不符合 RFC6265 关于处理 cookie 的路径属性

Firefox 不符合 RFC6265 关于处理 cookie 的路径属性

PHP
米琪卡哇伊 2022-01-02 19:36:31
我正在编写一个 PHP 类来处理/解析Cookie和Set-CookieHTTP 标头以在我的自定义用户代理(爬虫、抓取工具、机器人等)中使用它,在测试它时我发现它的行为与 Firefox 在他们处理标头中的Path属性的方式Set-Cookie。我回到了RFC 6265,我是对的###如何重现?在任何 PHP 文件中设置这一行并请求它<?phpheader("set-cookie: foo=1; path=/bar/", true);exit;现在/bar用 Firefox请求,你会看到 Firefox 正在发送 cookie,而它应该只/bar/根据规范发送到或更长的路径!###规格是什么?我将引用RFC 6265 5.1.4 Paths and Path-Match 中的相关部分如果至少满足以下条件之一,则请求路径路径匹配给定的 cookie 路径:o cookie-path 和 request-path 是相同的。o cookie-path 是请求路径的前缀,cookie-path 的最后一个字符是 %x2F ("/")。o cookie-path 是请求路径的前缀,请求路径的第一个不包含在 cookie-path 中的字符是 %x2F(“/”)字符。在这种情况下,请求路径/bar和 cookie 路径/bar/不匹配###Google Chrome 怎么样?谷歌浏览器不会将 cookie 发送给/bar👍我的问题谁是对的?铬合金 ?还是火狐?###额外细节:我在 Linux 上的 Firefox 66.0.4 和 Chrome 版本 76.0.3809.132 Linux 上进行了测试这是我在课堂上使用的相关函数public static function isPathMatch(string $requestPath, string $cookiePath){    if ($requestPath === $cookiePath) return true;    if (strpos($requestPath, $cookiePath) !== 0) return false;    if (substr($cookiePath, strlen($cookiePath) - 1, 1) === "/") return true;    if (substr($requestPath, strlen($cookiePath), 1) === "/") return true;    return false;}这是我为 Firefox找到的第二个问题,但它仍然是我最喜欢的浏览器 :)感谢@fendall 关于 RFC 的评论,我跟踪了与此问题相关的 RFC1997 年 2 月RFC 2109历史。被淘汰2000 年 10 月RFC 2965历史。被淘汰2011 年 4 月RFC 6265建议标准,如果获得批准将被废弃2017 年 8 月草案-ietf-httpbis-rfc6265bis-02互联网草案该MDN的Set-Cookie文件使用这两种规格RFC 6265和草案,IETF-httpbis-rfc6265bis-02和两种规格几乎是“路径和路径-匹配”部分中的相同。(我在问题中引用的部分)我向 Bugzilla 报告了一个错误https://bugzilla.mozilla.org/show_bug.cgi?id=1579552
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

是的,Chrome 是对的,正如ehsan akhgari在错误报告中所评论的那样

是的,我们的路径匹配算法与规范完全不同。与Chrome相比,它们似乎非常严格地遵循规范。

...他们更改了 Firefox 的源代码并修复了它https://phabricator.services.mozilla.com/D45427


查看完整回答
反对 回复 2022-01-02
  • 1 回答
  • 0 关注
  • 317 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信