【问题标题】:Determining origin of cookie which javascript or tracking pixel确定 cookie 的来源,哪个 javascript 或跟踪像素
【发布时间】:2015-09-05 22:29:15
【问题描述】:

我需要能够确定和识别 cookie 的来源。虽然许多 cookie 会在原始页面的 HTTP 响应中到达浏览器,但其他 cookie 是通过 javascript 或通过使用 http 加载到页面上的资产(例如跟踪像素或 AJAX 调用)添加到浏览器的。

确定/识别每个 cookie 来源的好方法是什么?

【问题讨论】:

  • 怎么样?您想通过浏览器插件执行此操作吗?数据包嗅探器?如果我们要能够建议一个好的破解方法来获取它,需要更多关于为什么需要这些数据的信息。这是为您的网站准备的吗?其他网站?
  • 我们自己的公司网站。但是,有十几个团队正在研究它和子域以及正在使用的许多第三方插件。我们遇到了 cookie 增长到超过 8k 的情况,需要确定来自哪里的内容,以便我们可以启动 cookie 饮食。数据包嗅探器不会告诉您 javascript 启动的 cookie。如果有一个浏览器插件可以在设置 cookie 时进行监控,那就太棒了。 :)
  • 这就是我的意思...如果您查看网络创建的 cookie,您就会知道剩下的那些是由 JavaScript 创建的。不过,这并不真正适用于您的情况。您应该将该信息添加到您的问题中,因为这确实可以阐明发生了什么。
  • 好的,对于与网络相关的 cookie,我似乎无法在每页加载的所有数百个网络请求中找到任何可以告诉我实际设置 cookie 的信息。我必须在 1000 多页的每一页上打开每个一百多个网络调用的响应。这是一项手工工作,只是为了找出一些 cookie 是由 javascript 设置的。然后搜索数百个 javascript 文件以查找设置了哪些 cookie。
  • 我的任务是准确识别哪个 cookie 是由哪个 javascript 文件设置的。以及哪些 cookie 是由流量像素图像调用设置的。目前我已经确定了 64 个唯一的 cookie 名称,然后需要确定哪些代码行正在制作它们或哪些跟踪像素调用了它们。

标签: javascript http cookies tracking-pixel


【解决方案1】:

在 Chrome 控制台上粘贴的代码,基于此: Breaking JavaScript execution always when cookie is set

function debugAccess(obj, prop, debugGet){
        var origValue = obj[prop];
        Object.defineProperty(obj, prop, {
            get: function () {
                if ( debugGet )
                    debugger;
                return origValue;
            },
            set: function(val) {
                debugger;
                return origValue = val;
            }
        });
    };
    debugAccess(document, 'cookie');

【讨论】:

    【解决方案2】:

    发布这个,因为我也在努力解决这个问题,终于找到了解决方案。

    据我所知,这仅在 Firefox 控制台中有效...

    1. 在刷新后(在设置任何 cookie 之前)您知道在页面上运行的 javascript 的第一行设置断点。
    2. 然后清除缓存和 cookie。
    3. 将以下代码 sn-p 粘贴到 Firefox 的控制台中。
    4. 删除断点并恢复脚本执行。

    您应该会在控制台中看到正在创建的每个 cookie 的堆栈跟踪!

    origDescriptor = Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie'); // add cookie property to HTMLDocument constructor
    
    Object.defineProperty(document, 'cookie', {
        get() {
            return origDescriptor.get.call(this);
        },
    
        set(value) {
            console.log("%c Cookie is :" + value, "background: #ffffff; color: #000000");
            console.trace();
            // debugger;
            return origDescriptor.set.call(this, value);
        },
    
        enumerable: true,
        configurable: true
    });
    

    我必须感谢 fflorent 他在另一个主题中发布的这段代码 - 谢谢!

    【讨论】:

    • 这是另一个主题:stackoverflow.com/questions/41245885 如上所述,与 chrome 无关,对于 chrome,将其粘贴到控制台中:function debugAccess(obj, prop, debugGet){ var origValue = obj[prop] ; Object.defineProperty(obj, prop, { get: function () { if (debugGet) debugger; return origValue; }, set: function(val) { debugger; return origValue = val; } }); }; debugAccess(document, 'cookie');
    【解决方案3】:

    在浏览器中打开开发控制台并保存对本机 document.cookie getter/setter 的引用。在此之后,使用您自己的函数覆盖 document.cookie getter/setter,您可以在其中包含一个 console.log('creating cookie: ' + value),然后在该函数中调用本机 getter/setter。有关代码示例,请参见以下链接:Cookie Monster

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2016-10-13
      • 2016-04-02
      • 1970-01-01
      • 2012-07-09
      • 2020-02-11
      • 2011-10-30
      相关资源
      最近更新 更多