如何检测与网页交互并篡改代码的特定Chrome扩展
问题根源
普通网页的JavaScript环境没有权限访问Chrome扩展API(包括chrome.runtime、chrome.extension),这是Chrome的安全隔离机制导致的——扩展API仅对扩展自身的代码(背景脚本、内容脚本、弹窗等)开放,外部网页无法直接调用,所以你会遇到chrome.runtime未定义的错误。
可行的检测方案
既然无法直接调用扩展API,你需要基于目标扩展篡改网页的具体行为特征来间接检测它的存在,常见思路如下:
1. 检测扩展注入的全局变量/标记
很多恶意扩展会在网页的全局window对象上留下自定义属性,你可以直接检查这些标记:
function detectTargetExtension() { // 假设目标扩展会注入window.__target_ext_id这个全局变量 if (window.__target_ext_id === "bjnkkhimoaclnddigpphpgkfgeggokam") { alert("检测到目标篡改扩展"); return true; } return false; } // 页面加载完成后执行检测 window.addEventListener('DOMContentLoaded', detectTargetExtension);
2. 检测扩展注入的DOM元素
如果扩展会在页面中插入特定的DOM节点(比如隐藏的标记元素),可以通过DOM查询检测:
function detectTargetExtension() { // 查找扩展可能注入的特定元素(示例:带有特定data属性的元素) const extMarker = document.querySelector('[data-ext-id="bjnkkhimoaclnddigpphpgkfgeggokam"]'); if (extMarker) { alert("检测到目标篡改扩展"); return true; } return false; } window.addEventListener('load', detectTargetExtension);
3. 检测被篡改的原生API
如果扩展会修改网页的原生API(比如fetch、XMLHttpRequest、document.write)来篡改内容,可以对比API的原始特征:
// 保存fetch的原始引用(需要在扩展篡改前执行,比如放在页面最顶部) const originalFetch = window.fetch; function detectAPITampering() { if (window.fetch !== originalFetch) { // 进一步验证是否为目标扩展的篡改(比如检查函数toString的特征) if (window.fetch.toString().includes("bjnkkhimoaclnddigpphpgkfgeggokam")) { alert("检测到目标扩展篡改了fetch API"); return true; } } return false; } window.addEventListener('load', detectAPITampering);
关键提示
- 你需要先明确目标扩展具体是如何篡改网页的(比如注入了什么、修改了什么),才能针对性编写检测逻辑。
- 永远不要尝试依赖扩展内部的API调用,网页没有权限访问这些私有接口。
内容的提问来源于stack exchange,提问作者Beeshoy Elshaype
相关产品推荐
相关产品推荐

