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 字符串),它会加载一个空页面;这显然会更快。我不确定它对 script
和 link
标签做了什么,所以这个变体可能有点不同,但这就是他们在 Shopify 上报告的内容。
不过,仅根据第一行我就会非常怀疑。任何时候您的字符串中的信息以奇怪的方式嵌入字符串中,都有可能被用来隐藏信息。在这里,他们似乎试图隐藏他们正在检查 'Chrome-Lighthouse'
('\x43\x68\x72\x6F\x6D\x65\x2D\x4C\x69\x67\x68\x74\x68\x6F\x75\x73\x65'
) 的 user-agent 字符串这一事实,但它也可能是窃取会话 cookie 的代码,或者替换页面上的链接以指向恶意站点。对似乎在逃避人类或其他静态检测的代码要非常谨慎。
我的公司以低廉的价格聘请了外部人员进行升级,以优化灯塔分数。他让我回顾他们所做的事情,而我正试图弄清楚他们到底做了什么。我们的分数肯定上升了,但它看起来像是一套特殊的规则,用于 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 字符串),它会加载一个空页面;这显然会更快。我不确定它对 script
和 link
标签做了什么,所以这个变体可能有点不同,但这就是他们在 Shopify 上报告的内容。
不过,仅根据第一行我就会非常怀疑。任何时候您的字符串中的信息以奇怪的方式嵌入字符串中,都有可能被用来隐藏信息。在这里,他们似乎试图隐藏他们正在检查 'Chrome-Lighthouse'
('\x43\x68\x72\x6F\x6D\x65\x2D\x4C\x69\x67\x68\x74\x68\x6F\x75\x73\x65'
) 的 user-agent 字符串这一事实,但它也可能是窃取会话 cookie 的代码,或者替换页面上的链接以指向恶意站点。对似乎在逃避人类或其他静态检测的代码要非常谨慎。