0

0

如何通过堆栈追踪识别外部域名设置 Cookie 的来源

碧海醫心

碧海醫心

发布时间:2026-02-18 18:42:02

|

521人浏览过

|

来源于php中文网

原创

如何通过堆栈追踪识别外部域名设置 Cookie 的来源

本文介绍一种利用 javascript 属性拦截与错误堆栈分析的技术,实现在主站(domain a)中精准识别由第三方脚本(domain b)写入 cookie 的源头域名,适用于安全审计、合规监控与跨域行为分析场景。

本文介绍一种利用 javascript 属性拦截与错误堆分析的技术,实现在主站(domain a)中精准识别由第三方脚本(domain b)写入 cookie 的源头域名,适用于安全审计、合规监控与跨域行为分析场景。

在现代 Web 应用中,第三方脚本(如广告、分析、SDK 等)常通过 <script src="https://domain.b/sdk.js"> 方式嵌入主站(domain A),并在运行时调用 document.cookie = ... 设置 Cookie。由于同源策略限制,<strong>JavaScript 无法直接读取或枚举已存在的 Cookie 的创建来源——document.cookie 仅返回当前域下可访问的键值对,且不附带元信息(如设置者域名、时间戳、HTTP-only 标志等)。</script>

但关键突破口在于:Cookie 的写入操作必然发生在某段 JavaScript 执行上下文中,而该上下文可通过调用堆栈(call stack)追溯到原始脚本 URL。虽然浏览器不提供原生 API 获取“谁设置了这个 Cookie”,但我们可以通过重定义 document.cookie 的 setter,捕获每次赋值动作,并借助 Error.stack 提取执行栈中最末尾(即最靠近调用点)的脚本位置。

以下为经过优化、兼容主流浏览器(Chrome、Firefox、Edge)的实用方案:

<script type="text/javascript">
  function monitorCookieOrigin() {
    // 仅在支持 Object.defineProperty 的环境中启用
    if (!Object.defineProperty || !document) return;

    Object.defineProperty(document, 'cookie', {
      set: function (value) {
        // 创建错误对象以捕获当前执行栈
        const err = new Error();
        let stack = err.stack || '';

        // 清洗堆栈:移除 Error 构造提示,提取有效行
        const lines = stack
          .split('\n')
          .map(line => line.trim())
          .filter(line => line && !line.startsWith('Error'));

        // 取最后一行(最接近 cookie 写入点的调用者)
        const lastCall = lines.length > 0 ? lines[lines.length - 1] : 'unknown';

        // 输出结构化日志:Cookie 值 + 源脚本地址(含域名)
        console.info('[Cookie Origin Monitor]', {
          value: String(value).substring(0, 100), // 防止过长截断
          originScript: lastCall.match(/@([^:\s]+:[\d]+)/)?.[1] || lastCall,
          timestamp: new Date().toISOString()
        });
      },
      configurable: true,
      enumerable: true
    });
  }

  // 页面加载后立即启用监控
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', monitorCookieOrigin);
  } else {
    monitorCookieOrigin();
  }
</script>

示例输出(Chrome):

Veed AI Voice Generator
Veed AI Voice Generator

Veed推出的AI语音生成器

下载
[Cookie Origin Monitor] {
  value: "tracking_id=abc123; domain=.domain.a; path=/",
  originScript: "https://domain.b/script.js:42:15",
  timestamp: "2024-06-15T08:22:34.123Z"
}

示例输出(Firefox):
Firefox 堆栈格式略有差异,但同样包含脚本 URL:

[Cookie Origin Monitor] {
  value: "session=xyz; expires=...",
  originScript: "https://domain.b/analytics.min.js line 1 > script:127",
  timestamp: "2024-06-15T08:22:34.456Z"
}

⚠️ 重要注意事项:

  • 仅监控写入行为,不追溯历史 Cookie:该方法仅捕获 document.cookie = ... 执行瞬间的调用栈,无法回溯页面加载前已存在的 Cookie 来源。
  • 无法识别服务端 Set-Cookie 头:若 Cookie 由 domain B 的后端响应头 Set-Cookie 直接下发(如 iframe 加载、fetch 请求),此方案无效——因无 JS 执行上下文。
  • 受 CSP 与严格模式影响:若站点启用了 Content-Security-Policy: script-src 'self' 且未允许 'unsafe-eval',部分堆栈解析可能受限;建议配合 report-uri 收集异常。
  • 生产环境慎用:重定义原生属性存在极小兼容风险,建议仅用于开发/审计阶段,或封装为条件加载模块(如 ?debug=cookies)。
  • 隐私与合规提示:监控第三方 Cookie 行为需符合 GDPR、CCPA 等法规要求,建议在用户授权前提下启用,并避免记录敏感值(如完整 Cookie 字符串可做脱敏处理)。

? 进阶建议:

  • 结合 PerformanceObserver 监听 resource 类型,关联 domain.b/script.js 的加载时机;
  • 使用 MutationObserver 配合 <script> 节点插入事件,预埋监控逻辑,提升覆盖率; </script>
  • 将日志上报至内部审计平台,构建第三方行为图谱,辅助识别隐蔽跟踪行为。

综上,尽管浏览器未暴露 Cookie 元数据,但通过拦截 setter + 解析执行栈,我们能以高置信度定位绝大多数 JS 驱动的 Cookie 设置源头——这是前端安全可观测性中一项轻量、有效且无需后端协作的关键技术实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

962

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

792

2023.11.06

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1575

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

392

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

988

2025.04.24

resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

169

2023.12.20

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6469

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

362

2023.11.23

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

561

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
php注册登录系统开发实战
php注册登录系统开发实战

共10课时 | 13.5万人学习

PHP基于Cookie的购物车模块设计
PHP基于Cookie的购物车模块设计

共10课时 | 10.8万人学习

第三期培训_PHP开发
第三期培训_PHP开发

共116课时 | 26.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号