为何带__Host-前缀的Cookie必须设置Path=/?
为什么必须要求Path=/?
- 消除路径歧义风险:要是允许自定义Path,攻击者可能构造特定路径页面,利用浏览器或服务器的路径解析漏洞,让本该限制在特定路径的Cookie被意外发送到恶意路径下。强制Path=/意味着Cookie会发送到域名下所有路径,反而从规则层面堵死了路径相关的绕过可能——毕竟没有“更窄”的路径能被用来钻空子。
- 简化安全校验:统一要求Path=/,浏览器验证__Host-前缀Cookie时不用额外解析复杂路径规则,减少了校验环节出漏洞的概率。
规则的制定依据
这个规则出自RFC 6265bis(Cookie规范的修订版本),最初的讨论围绕强化Cookie安全性、防止意外暴露或劫持展开。核心思路就是给高安全级别的Cookie设定严格且无歧义的约束,避免因路径、域名等配置疏漏引入风险。
用Path=/foo/bar的安全劣势
如果你的Cookie设为Path=/foo/bar,同时想用上__Host-前缀的话,浏览器会直接拒绝这个Cookie,因为不符合前缀的强制要求。要是放弃__Host-前缀改用普通Cookie,会面临两个问题:
- 失去__Host-前缀的专属保护:比如无法避免同源下其他路径的脚本访问该Cookie(虽然Path限制了发送范围,但同源脚本默认能访问所有Path的Cookie,除非加HttpOnly属性)。
- 路径解析漏洞风险:部分服务器或浏览器对路径匹配的解析比较宽松,比如请求/foo/bar/baz会匹配/foo/bar,但攻击者要是构造/foo/bar%20这类畸形路径,可能绕过Path限制,让Cookie被发送到不该去的地方。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

