场景痛点
下载的模板将通用JS加密并强行注入外链,解密代价高且代码仍被混淆。
虽然可通过打断点或注释loadS...(函数名就不具体指出了)函数解决,但若以后函数名也被混淆就又得重新找。
因此研究直接重写document.createElement,无需解密即可拦截加密脚本中的恶意外链,一劳永逸。
技术方案
const nativeCreateElement = document.createElement; const blockedUrls = ['xxx.com/js.js', 'yyy.com/malware.js']; // 自行增减需要拦截的URL列表 document.createElement = function(tagName) { const element = nativeCreateElement.call(document, tagName); if (tagName.toLowerCase() === 'script') { // 拦截script.src = '...' Object.defineProperty(element, 'src', { set(url) { if (blockedUrls.some(blockedUrl => url.includes(blockedUrl))) { console.log('[拦截] 阻断外链:', url); return; } element.setAttribute('src', url); }, get() { return element.getAttribute('src'); } }); // 拦截script.setAttribute('src', '...') const originalSetAttr = element.setAttribute; element.setAttribute = function(name, value) { if (name === 'src' && blockedUrls.some(blockedUrl => value.includes(blockedUrl))) { console.log('[拦截] 阻断setAttribute:', value); return; } originalSetAttr.call(this, name, value); }; } return element; };
使用方式
1、直接在被加密脚本上方添加上方代码,并在blockedUrls中自行增减需要拦截恶意外链JS
2、保存修改,回到浏览器CTRL+F5强制刷新或清楚浏览器缓存
3、浏览器F12,观察控制台是否有拦截提示或网络界面恶意外链JS是否真的没有被加载
核心优势
1、无需解密:直接拦截DOM API调用,对加密脚本透明
2、双重防护:覆盖src属性赋值和setAttribute两种注入方式
3、精准拦截:仅针对特定域名规则,不影响其他正常脚本
注意事项
1、这种拦截方式应该在页面最早加载的脚本中执行
2、可能会与某些框架的脚本加载机制冲突
3、不能拦截通过innerHTML或document.write等方式插入的脚本
4、通过其他方式插入的脚本可以把该代码喂给AI补充完善

本站部分文章搜集整理于互联网或者网友提供,如有侵权请联系站长
如若转载,请注明出处:https://www.htmlbk.com/web/2542.html
温馨提示:该文档最后一次修改时间为2025-06-25 18:07:55,请注意相关的内容是否还可用!