第五部分 — 内容脚本与页面交互 DOM 访问模式与安全桥接

12.1 目的

有些页面操作无法直接在内容脚本中完成:

  • 调用页面 JS 函数

  • 与页面拥有的变量进行交互

本节展示了一个安全的"桥梁"模式。

12.2 使用场景 / 避免场景

使用场景: 当你需要在页面世界运行代码时。

避免场景: 仅需一个隔离世界的 DOM 变更即可。 如果可以从服务工作者 orchestrating,这是在页面的 JavaScript 环境中运行代码最可靠的方式。

sw.js:

javascript 复制代码
async function runInPageWorld(tabId) {
  const [{ result }] = await chrome.scripting.executeScript({
    target: { tabId },
    world: "MAIN", // page world (page CSP applies)
    func: () => {
      // Runs in the page's JS environment.
      return { href: location.href, title: document.title };
    },
  });
  return result;
}
复制代码

注释:

  • 需要 scripting 权限加上主机访问权限(host_permissions 或 activeTab)。

  • 主程序世界代码未被隔离;请保持其简洁,并且切勿暴露机密信息。

12.4 回退方案:postMessage 桥接(内容脚本 ↔ 页面)

这种模式简单易行,但同时也较为脆弱: 向页面世界注入 <script> 标签可能会被页面的 CSP 阻止。

content.js: CODE_BLOCK_56

最小示例

一个最小的 MV3 安全异步消息处理器(适合作为模板使用): CODE_BLOCK_57

12.5 常见问题

  • postMessage 操作务必谨慎(始终验证 type + 形状)。

  • 向页面泄露机密信息(切勿在页面中暴露扩展程序的机密信息)。

  • MAIN 世界并非隔离;页面代码可能会互相干扰(请尽量保持简洁)。

12.6 检查清单

  • 使用严格的消息类型

  • 切勿向页面暴露扩展程序的秘密

  • 在可能的情况下,优先使用独立世界的 DOM 操作

12.7 参考资料

相关推荐
数据知道21 小时前
SSTI 模板注入:Jinja2 沙箱逃逸实战
网络·安全·网络安全
Fnetlink121 小时前
Fnet 云网安 260810
网络·安全·web安全
飞飞传输21 小时前
海关行业FTP传输服务器评测:传统FTP与现代化替代方案对比
大数据·运维·安全
Safeploy安策数据21 小时前
网络保密机如何部署?破解敏感数据跨域流转安全难题
网络·安全
蓝田~1 天前
AI Demo到上线有多远?→ 安全纵深防御+Token成本精确计算+可观测性,PrismAI三周工程化复盘
人工智能·安全
互联网中的一颗神经元1 天前
04 — 安全撤销:改错了怎么退回去
大数据·安全·elasticsearch
智脑API1 天前
Claude Code sandbox.failIfUnavailable 怎么用?沙箱启动失败、拒绝降级和 CI 安全
安全·ci/cd
笨#小孩1 天前
文件上传漏洞:原理与20种实战绕过方法(上)
安全·web安全
栩栩云生2 天前
AI 最大的安全问题:它让”发送数据”看起来像”继续思考”
安全·github·agent
OCR_133716212752 天前
从硬件到加密协议:深度解析电子护照芯片的技术规范与安全架构
安全·安全架构