如何保护 document.referrer 免受第三方脚本更改的影响?

How to protect document.referrer from third party script changes?

我在我的网站上使用了第三方脚本(Chaordic loader.js 用于产品推荐),它覆盖 document.referrer 垃圾,让我很头疼。

问:请问有什么办法可以防止这种修改吗?我可以 "freeze/seal" document.referrer 以某种方式吗?

我知道我可以取消与公司的合同,但想先试试这把锁。我可以在第三部分代码之前或之后放置javascript代码,但不能修改它。

覆盖document.referrer的第三方代码:

var t = window.chaordic && window.chaordic.readCookie && window.chaordic.readCookie(e);
Object.defineProperty(window.document, "referrer", {
  configurable: false,
  get: function() { return t }
});

如果您控制将您带到与 document.referrer 混淆的页面的文档,请确保使用 rel="noreferrer" 属性设置 any/all 链接,该属性告诉当前 window 在导航到下一个 window 时不要保留对自身的引用,使 document.referrer 返回为 null。

由于我不确定您是否可以访问调用页面或您在目标页面上的具体情况,我没有将您的问题标记为重复,但有更多信息.

答案几乎就在你的问题里

// You need to put the following code before their code runs 
const referrer = document.referrer;
Object.defineProperty(window.document, "referrer", {
  configurable: false,
  get: () => referrer,
});

你也可以这样做

Object.defineProperty(window.document, "referrer", {
  configurable: false,
  writable: false,
  value: document.referrer
});

现在除了Javascript,我会考虑其他选择。更改 document.referrer 是他们正在做的一件您知道的令人讨厌的事情。他们可能在做其他你不知道的坏事。