角度:无法读取未定义的属性“ disguiseToken”

时间:2019-03-16 06:08:33

标签: angular runtime-error

我完全理解错误的含义。我的问题是什么是“伪装令牌”?我从未听说过,这不是我的代码中的内容。我在整个代码库中搜索了“伪装”一词,但没有命中,因此它一定是Angular内部的内容。这到底是什么?我每天都会收到数十次此错误,但我不知道它是什么。我正在运行Angular 7。

TypeError: Cannot read property 'disguiseToken' of undefined
at getOwnPropertyDescriptor (eval at  (:1:38695), :560:24)
at Function.Object.getOwnPropertyDescriptor (https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:39700)
at a (https://www.mywebsite.com/main.25a9fda6ea42f4308b79.js:1:1075141)
at https://www.mywebsite.com/5.6c58d8732681a35a1f8b.js:1:1533
at Object.26NW (https://www.mywebsite.com/5.6c58d8732681a35a1f8b.js:1:1805)
at i (https://www.mywebsite.com/runtime.8928e149b3f1200cf1ca.js:1:507)
at Module.L6id (https://www.mywebsite.com/5.6c58d8732681a35a1f8b.js:1:62181)
at i (https://www.mywebsite.com/runtime.8928e149b3f1200cf1ca.js:1:507)
at https://www.mywebsite.com/main.25a9fda6ea42f4308b79.js:1:914848
at t.invoke (https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:8160)
at M (https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:14076)
at M (https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:13634)
at https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:14864
at t.invokeTask (https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:8844)
at Object.onInvokeTask (https://www.mywebsite.com/main.25a9fda6ea42f4308b79.js:1:467756)
at t.invokeTask (https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:8765)
at e.runTask (https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:4026)
at g (https://www.mywebsite.com/polyfills.d8680adf69e7ebd1de57.js:1:11111)

1 个答案:

答案 0 :(得分:3)

陪审团仍然在那里。只是总结当前状态和评论:

  1. disguise + eval +用户在页面上没有发现明显的错误+无法找到字符串。所有这些都暗示了恶意npm软件包的可能性。由于代码可能很混乱,因此搜索disguiseToken不会产生任何结果。您只需运行npm install就可以了。有时甚至是受人尊敬的软件包也会被劫持。

  2. 但是还有其他可能性

    1. 通过浏览器扩展注入
    2. 通过用户软件(防火墙,防病毒或病毒,上帝知道还有什么)注入
    3. 由一些糟糕的ISP注入
    4. 。即使使用https,仍然有可能,至少在某些国家(哈萨克斯坦)是这样。或者也许是公司网络。
    5. 用户手动注入
  3. 似乎已经弄清楚了问题出在自己的代码库之外。但这从一开始就是众所周知的。

  4. 该问题似乎来自Proxy内部。但这不是必需品,所以从我们现在在问题中可以看到:

    • 某些代码创建Proxy的事实并不意味着该Proxy会引发错误。
    • 并且因为您仅返回target就阻止了代理的创建,所以您应该不会看到错误。
    • 如果您这样做-那么造成麻烦的不是Proxy
    • 如果您不这样做-含义不多,因为该错误很少发生。
  5. 该怎么办?一些悬而未决的问题:

    1. 如果您将try-catch用于日志,它将仅捕获代码内部及其相关性中的错误(表示恶意的npm软件包)。
    2. window.onerror-它可以从某些注入脚本(设置了window.onerror处理程序后抛出的那些脚本)中捕获一些错误。
    3. MutationObserver可以捕获仅在设置后才注入的脚本,并且只能捕获从页面上已经存在的脚本注入的脚本。这又意味着-在代码依赖项内部。它不会捕获 MiM 脚本,因为在这种情况下,用户加载了一个脚本已经存在的页面。因此,您可能也应该登录<head>。页面加载后。并在错误。 (但是脚本也可以在HTML末尾或其他地方注入)。
    4. 尽管有可能仅在浏览器加载页面后才对其进行修改。扩展很可能。抗病毒的可能性较小。 MiM 不太可能。
    5. 获取用户的IP地址,也许您会在其中找到一些模式。即使您不使用服务器,它似乎仍然可行:How to get client's IP address using JavaScript?
    6. 正如@ user120242所指出的,有人遇到了相同的问题:https://gitlab.com/minds/front/-/issues/1864 我在那儿发表了评论,寻求帮助,但还没有答复。不幸的是,答复是:

      我认为我们没有进行任何更改来解决此问题,它已关闭,因为它已停止在Sentry中使用。我猜供应商更新解决了根本问题。