第五部分 — 内容脚本与页面交互 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 参考资料

相关推荐
Ruiery16 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
熊猫钓鱼>_>17 小时前
碰一碰无网近场文件快传与断点续传【鸿蒙心迹】
华为·交互·harmonyos·arkts·鸿蒙·openharmony·鸿蒙心迹
一木 之林18 小时前
Dify学习笔记 03 · RAG检索增强生成:三代范式、评估与落地(第40-45、55-56集)
笔记·小程序·交互·dify
mennekes19 小时前
临时用电线路标识:插头颜色、钟面标识配套规范
运维·网络·科技·安全·制造
是真的小外套1 天前
网络安全实战第7期:Hydra爆破SSH实战
安全·web安全·ssh
jimmyleeee1 天前
Agent安全之七:当智能体之间开始“互相信任”------深入理解 OWASP ASI07 不安全的智能体间通信
人工智能·安全
卓豪终端管理1 天前
终端零信任落地实践:应用控制与权限管理的五层管控体系
安全·web安全
深蓝AI1 天前
一个版本号失守:Claude Code 2.1.313 扩展后门事件,开发者机器如何变成别人的 SSH 入口
安全·程序员
金海星科技1 天前
从“装摄像头“到“用摄像头管安全“:船舶智能监控的范式变化
安全
jimmyleeee1 天前
Agent安全之六:(ASI06)记忆与上下文投毒——当 AI 把“昨天的错误”当成“今天的真理”
网络·人工智能·安全