如何提取外部域名设置的Cookie信息并确认其来源域名?
核心结论
Cookie本身的属性(比如domain、path)不会记录创建它的脚本来源域名(即你提到的domain B),但可以通过浏览器工具或主动监测的方式精准追踪到设置Cookie的脚本来源。
具体实现方法
1. 用浏览器开发者工具的Network面板追踪
- 打开浏览器DevTools(快捷键F12/ Ctrl+Shift+I),切换到「Network」面板,勾选「Preserve log」(避免刷新后日志丢失)
- 刷新页面,在Network面板的筛选栏输入domain B的域名,找到来自domain B的脚本请求
- 查看该脚本的响应内容,确认是否包含
document.cookie = ...这类设置Cookie的代码;同时可以切换到Network面板的「Cookies」标签,对比脚本加载前后的Cookie列表,找到新增的目标Cookie - 另外,Network面板的「Initiator」列会显示脚本的发起来源,可直接确认该脚本来自domain B
2. 用Performance面板定位设置Cookie的代码位置
- 打开DevTools的「Performance」面板,点击录制按钮(圆形图标),然后刷新页面,页面加载完成后停止录制
- 在搜索栏输入
document.cookie,找到涉及设置Cookie的调用记录 - 点击该记录查看调用栈,找到执行设置操作的脚本文件路径,确认其域名是否为domain B
3. 代码层面主动监测Cookie设置行为
- 可以通过重写
document.cookie的setter方法,监听所有Cookie设置操作,并捕获执行上下文的调用栈,从而拿到脚本来源:// 保存原生的cookie setter const originalCookieSetter = Object.getOwnPropertyDescriptor(document, 'cookie').set; // 重写setter Object.defineProperty(document, 'cookie', { set: function(cookieString) { // 生成调用栈,从中提取脚本来源 const callStack = new Error().stack; console.log('Cookie已设置:', cookieString); console.log('设置来源调用栈:', callStack); // 调用原生setter完成Cookie设置 return originalCookieSetter.call(this, cookieString); } }); - 运行这段代码后,当domain B的脚本设置Cookie时,控制台会输出调用栈,其中包含该脚本的完整URL,直接提取domain B即可
补充说明
domain B的脚本能在domain A上设置Cookie,必须满足两个前提:
- domain A和domain B属于父子域名关系(比如domain A是
a.example.com,domain B是b.example.com) - 设置Cookie时指定了
domain属性为domain A(或其上级公共域名),同时path属性符合浏览器的同源策略要求
内容的提问来源于stack exchange,提问作者FEDEV
相关产品推荐
相关产品推荐

