当前位置:网站首页 >  攻略

从零搭建谷歌浏览器扩展精准拦截XSS钓鱼恶意脚本

时间:2026年06月12日 13:39:22 来源:易频IT社区
一、准备开发环境 1.1 必备工具 不需要任何复杂开发框架,仅需两个工具: 1. 最新版谷歌Chrome浏览器(下载地址:https://www.google.cn/chrome/) 2. 任意纯文本编辑器(推荐VS Code,下载地址:https://code.visualstudio.com/) 1.2 创建项目文件夹 在桌面或任意位置新建一个文件夹,命名为`malicious-script-blocker`,后续所有文件都放在这个文件夹内。 二、编写核心配置文件manifest.json manifest.json是Chrome扩展的身份证,所有功能都依赖它声明。创建文件并复制以下完整代码: ```json { "manifest_version": 3, "name": "恶意脚本拦截器", "version": "1.0", "description": "精准拦截XSS注入、钓鱼诱导类恶意脚本", "permissions": ["activeTab", "storage"], "host_permissions": [""], "content_scripts": [ { "matches": [""], "js": ["content.js"], "run_at": "document_start" } ], "action": { "default_popup": "popup.html", "default_icon": "icon.png" } } ``` 代码关键配置说明: - `manifest_version: 3`:强制使用Chrome最新的V3规范,V2已停止更新 - `run_at: "document_start"`:在DOM解析前就注入拦截脚本,从源头阻断 - `host_permissions: [""]`:支持拦截所有网页(可后续缩小范围) - `action`:可选配置,用于做一个简单的开关界面 三、编写核心拦截脚本content.js content.js是直接注入网页运行的脚本,负责实时检测并拦截恶意代码。创建文件并复制以下完整代码: ```javascript // 恶意脚本特征库(可自行添加) const maliciousPatterns = [ // XSS类 /eval\s\(/gi, /document\.cookie\s[=+]/gi, /inner\sHTML\s[=+]/gi, /outer\sHTML\s[=+]/gi, /javascript\s:/gi, /on\w+\s=/gi, // 钓鱼诱导类(常见跳转、弹窗语句) /window\.location\s[=+]/gi, /location\.href\s[=+]/gi, /open\s\(\s['"]http/i, /alert\s\(\s['"]银行卡/i, /alert\s\(\s['"]登录/i ]; // 1. 拦截动态插入的脚本标签 const originalCreateElement = document.createElement; document.createElement = function(tagName) { const element = originalCreateElement.call(document, tagName); if (tagName.toLowerCase() === 'script') { // 监听src属性变化 const srcObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { if (mutation.type === 'attributes' && mutation.attributeName === 'src') { checkAndBlock(element, element.src); } }); }); srcObserver.observe(element, { attributes: true }); // 监听textContent/innerHTML变化 const textObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { const content = element.textContent || element.innerHTML; if (content) checkAndBlock(element, content); }); }); textObserver.observe(element, { childList: true, subtree: true }); } return element; }; // 2. 拦截内联事件处理 const originalSetAttribute = Element.prototype.setAttribute; Element.prototype.setAttribute = function(name, value) { if (name.toLowerCase().startsWith('on') && checkPattern(value)) { console.log('[恶意脚本拦截器] 已拦截内联事件:', name, '=', value); return; } return originalSetAttribute.call(this, name, value); }; // 3. 拦截eval等危险函数 const originalEval = window.eval; window.eval = function(code) { if (checkPattern(code)) { console.log('[恶意脚本拦截器] 已拦截eval执行:', code.slice(0, 100)); return null; } return originalEval.call(window, code); }; // 4. 拦截document.write/writeln const originalWrite = document.write; const originalWriteln = document.writeln; document.write = function(content) { if (checkPattern(content)) { console.log('[恶意脚本拦截器] 已拦截document.write:', content.slice(0, 100)); return; } return originalWrite.call(document, content); }; document.writeln = function(content) { if (checkPattern(content)) { console.log('[恶意脚本拦截器] 已拦截document.writeln:', content.slice(0, 100)); return; } return originalWriteln.call(document, content); }; // 公共检测与阻断函数 function checkPattern(content) { if (!content) return false; return maliciousPatterns.some(pattern => pattern.test(content)); } function checkAndBlock(element, content) { if (checkPattern(content)) { console.log('[恶意脚本拦截器] 已拦截恶意脚本:', content.slice(0, 100)); element.remove(); element.disabled = true; } } console.log('[恶意脚本拦截器] 已启动'); ``` 代码核心逻辑说明: - 重写原生DOM和JS API:从底层拦截所有可能的脚本执行入口 - 特征库可扩展:你可以根据遇到的恶意脚本,自行在`maliciousPatterns`数组中添加正则表达式 - 拦截后有日志:打开Chrome开发者工具(F12)的Console面板,可看到所有拦截记录 四、编写简单的开关界面(可选) 4.1 创建popup.html 这是点击扩展图标弹出的界面,用于开启/关闭拦截。创建文件并复制以下完整代码: ```html ``` 4.2 创建popup.js 这是开关界面的逻辑脚本。创建文件并复制以下完整代码: ```javascript const toggle = document.getElementById('toggle'); // 初始化开关状态 chrome.storage.local.get('isEnabled', (result) => { toggle.checked = result.isEnabled !== false; }); // 监听开关变化 toggle.addEventListener('change', () => { chrome.storage.local.set({ isEnabled: toggle.checked }); // 刷新当前标签页让状态生效 chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { chrome.tabs.reload(tabs[0].id); }); }); ``` 4.3 更新content.js添加开关逻辑 在content.js的最开头添加以下代码: ```javascript // 读取开关状态,默认开启 chrome.storage.local.get('isEnabled', (result) => { if (result.isEnabled === false) { console.log('[恶意脚本拦截器] 已关闭'); return; } // 后面接原来的拦截逻辑 }); ``` 注意:要把原来的拦截逻辑(从恶意特征库到公共函数结束)全部放在这个回调函数里。 五、准备扩展图标(可选但规范) 找一张128x128像素的PNG图片,命名为`icon.png`,放入项目文件夹。如果没有,也可以跳过,但扩展图标会显示为Chrome默认图标。 六、加载扩展到Chrome浏览器 1. 打开Chrome浏览器,在地址栏输入`chrome://extensions/`并回车 2. 打开右上角的开发者模式开关 3. 点击左上角的加载已解压的扩展程序按钮 4. 选择之前创建的`malicious-script-blocker`文件夹 5. 扩展加载成功后,会在浏览器右上角显示图标(如果有icon.png的话) 七、测试拦截效果 7.1 测试XSS注入 创建一个测试HTML文件`test.html`,放入项目文件夹并复制以下代码: ```html ``` 用Chrome打开test.html,按F12打开Console面板,点击按钮,应该能看到拦截日志,且按钮不会弹出alert,页面不会插入动态内容。 7.2 测试钓鱼跳转 修改test.html添加以下代码: ```html ``` 刷新页面,点击按钮,应该能看到拦截日志,且不会跳转。 八、后续优化建议 1. 缩小host_permissions范围:如果只需要拦截特定网站,把``换成具体的URL,比如`["https://.taobao.com/", "https://.jd.com/"]` 2. 优化特征库:避免误杀正常代码,比如把`/inner\sHTML\s[=+]/gi`改成只拦截包含`javascript:`或`on\w+`的innerHTML 3. 添加白名单:在storage中存储白名单域名,遇到白名单域名时自动关闭拦截 4. 添加弹窗提醒:拦截时弹出浏览器通知(需要在manifest.json中添加`notifications`权限)

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图