为何Chrome应用面板未显示的Cookie会被跨子域XHR请求携带?
问题原因解析
1. Cookie的Domain默认行为
当你未显式指定Cookie的domain属性时,浏览器会自动将其设置为请求的目标主机名(即csrfexample.com)。这个Cookie的生效逻辑是:只要发起请求的页面域名与csrfexample.com属于同一站点(Same-Site),且请求目标是csrfexample.com,浏览器就会自动携带该Cookie。
2. 子域面板无法查看Cookie的原因
浏览器的Application -> Cookies面板仅展示与当前页面域名直接绑定的Cookie:
- 当前页面域名是
attacker.csrfexample.com,面板只会显示domain为attacker.csrfexample.com的Cookie。 - 而
domain为csrfexample.com的Cookie属于主域资源,仅会在csrfexample.com域名的页面面板中显示,但这并不影响子域向主域发起请求时携带它。
3. SameSite:Lax允许POST请求携带Cookie的原因
现代浏览器对SameSite规则的判断基于eTLD+1(有效顶级域名+1):
attacker.csrfexample.com和csrfexample.com的eTLD+1都是csrfexample.com,属于同一站点。SameSite:Lax的核心限制是阻止跨站点的非GET请求携带Cookie,但对同一站点内的跨域请求(子域到主域)没有这个限制,因此POST请求会正常携带Cookie。
如果需要阻止子域请求携带该Cookie,你可以显式设置Cookie的domain为当前主域,并结合SameSite: 'strict',或者确保请求发起方与目标域名不属于同一站点。
内容的提问来源于stack exchange,提问作者Ramya Balasubramanian
相关产品推荐
相关产品推荐

