Javascript 灯塔黑客?

Javascript Lighthouse Hack?

我的公司以低廉的价格聘请了外部人员进行升级,以优化灯塔分数。他让我回顾他们所做的事情,而我正试图弄清楚他们到底做了什么。我们的分数肯定上升了,但它看起来像是一套特殊的规则,用于 lighthouse-chrome 和 GTMetrix 代理忽略某些事情以获得更好的分数。

谁能破译这个并告诉我这只是黑客攻击还是合法的?

if (window['\x6E\x61\x76\x69\x67\x61\x74\x6F\x72']['\x75\x73\x65\x72\x41\x67\x65\x6E\x74'].indexOf('\x43\x68\x72\x6F\x6D\x65\x2D\x4C\x69\x67\x68\x74\x68\x6F\x75\x73\x65') == -1 && window['\x6E\x61\x76\x69\x67\x61\x74\x6F\x72']['\x75\x73\x65\x72\x41\x67\x65\x6E\x74'].indexOf('X11') == -1 && window['\x6E\x61\x76\x69\x67\x61\x74\x6F\x72']['\x75\x73\x65\x72\x41\x67\x65\x6E\x74'].indexOf('\x47\x54\x6D\x65\x74\x72\x69\x78') == -1) {
    var script_loaded = !1;

    function loadJSscripts() {
        console.log("Loading scripts 18000ms"), setTimeout(function() {
            if (!script_loaded) {
                script_loaded = !0;
                var t = document.getElementsByTagName("script");
                for (i = 0; i < t.length; i++) null !== t[i].getAttribute("data-src") && (t[i].setAttribute("src", t[i].getAttribute("data-src")), delete t[i].dataset.src);
                var e = document.getElementsByTagName("link");
                for (i = 0; i < e.length; i++) null !== e[i].getAttribute("data-href") && (e[i].setAttribute("href", e[i].getAttribute("data-href")), delete e[i].dataset.href);
                setTimeout(function() {
                    document.dispatchEvent(new CustomEvent("StartAsyncLoading")), document.dispatchEvent(new CustomEvent("StartKernelLoading"))
                }, 400)
            }
        }, 9e3)
    }

    function loadJSscriptsNow() {
        if (!script_loaded) {
            console.log("now ..."), script_loaded = !0;
            var t = document.getElementsByTagName("script");
            for (i = 0; i < t.length; i++) null !== t[i].getAttribute("data-src") && (t[i].setAttribute("src", t[i].getAttribute("data-src")), delete t[i].dataset.src);
            var e = document.getElementsByTagName("link");
            for (i = 0; i < e.length; i++) null !== e[i].getAttribute("data-href") && (e[i].setAttribute("href", e[i].getAttribute("data-href")), delete e[i].dataset.href);
            setTimeout(function() {
                document.dispatchEvent(new CustomEvent("StartAsyncLoading")), document.dispatchEvent(new CustomEvent("StartKernelLoading"))
            }, 400)
        }
    }
    var activityEvents = ["mousedown", "mousemove", "keydown", "scroll", "touchstart", "click", "keypress", "touchmove"];
    activityEvents.forEach(function(t) {
        window.addEventListener(t, loadJSscriptsNow, !1)
    }), document.addEventListener("load", loadJSscripts, !1), document.addEventListener("onload", loadJSscripts, !1), null != window.addEventListener ? window.addEventListener("load", loadJSscripts, !1) : null != window.attachEvent ? window.attachEvent("onload", loadJSscripts) : window.onload = loadJSscripts;
}

这似乎是一个骗局。

搜索该代码,我可以找到类似的代码 here and here

该代码故意难以阅读,但其想法似乎是当它检测到正在测量页面速度时(似乎是通过检查 User-Agent 字符串),它会加载一个空页面;这显然会更快。我不确定它对 scriptlink 标签做了什么,所以这个变体可能有点不同,但这就是他们在 Shopify 上报告的内容。

不过,仅根据第一行我就会非常怀疑。任何时候您的字符串中的信息以奇怪的方式嵌入字符串中,都有可能被用来隐藏信息。在这里,他们似乎试图隐藏他们正在检查 'Chrome-Lighthouse' ('\x43\x68\x72\x6F\x6D\x65\x2D\x4C\x69\x67\x68\x74\x68\x6F\x75\x73\x65') 的 user-agent 字符串这一事实,但它也可能是窃取会话 cookie 的代码,或者替换页面上的链接以指向恶意站点。对似乎在逃避人类或其他静态检测的代码要非常谨慎。