-
Notifications
You must be signed in to change notification settings - Fork 0
Security Model zh
Hermes Agent edited this page Oct 1, 2026
·
2 revisions
English | 中文 | 日本語 | 한국어 | Español | Português | Русский
browsa 把任意网页内容喂给模型、在扩展页面里渲染模型输出、还替用户向 CDN 发带 cookie 的请求——安全边界都在这几条链上。原则:fail-open 到「保留原文」,绝不静默出错数据。
- 扩展页 CSP:
script-src 'self' 'wasm-unsafe-eval'——禁new Function/eval,允许 WASM 实例化。 - Mol*/RDKit 的 embind glue 依赖 eval 构建类工厂 → build.mjs 在拷贝 vendor 时打补丁(手写 invoker 替代 eval 体、eager 初始化改 lazy),补丁正则锚定稳定字符串、失配即构建失败。
-
验证环境教训:dev-preview 是普通 http 页,默认允许 eval,验证不出 CSP 违规。任何 vendor 更换后必须在真扩展里跑(
launchPersistentContext --load-extension+ xvfb),断言 canvas/svg 存在 + 控制台零 CSP/EvalError。
-
不要把
ALLOWED_URI_REGEXP当sanitize()选项传——它会被套到所有「非内部安全名单」属性值上,<ol start="N">的裸数字都会被剥(真 bug:列表序号断档)。URI 校验要走uponSanitizeAttributehook,且只圈URI_ATTRS(href/src/poster/cite/…)。 - DOMPurify 的 data: 白名单不覆盖
data:image/svg+xml(可带 script)——module load 时注册 once-hook 单独拦。 - mermaid 要
securityLevel:'loose'(节点里跑 KaTeX),所以 SVG 必须过 vendoredsanitizeMermaidSvg(消毒 + 退化渲染拒收)——它是承重安全件。
-
<all_urls>host_permissions:扩展上下文 fetch 免 CORS(Ark/AlphaFold/RCSB/raw.githubusercontent 都靠它)、DNR 注入 CDN 请求头、任意 tab 注入脚本。没有后台代理服务器,所以这是必要的。 -
activeTab已移除(侧边栏场景它本来就不工作;注入全部显式 tabId)。 -
unlimitedStorage:关键帧/页图 dataURL 驻留 history(首次请求侧压缩前),默认 10MB 配额真实可达过。 - 备份的扩展私钥在仓库外(
/root/workspace/browsa-keys/,永不入库)。
ASR 下载需要 CDN 认的 Referer/Origin/cookie。会话级 DNR 规则,urlFilter 圈 CDN 域(bilivideo / googlevideo)+ initiatorDomains: [本扩展 ID]——把扩展的 chrome-extension Origin 改写成站点自身的。B 站与 YouTube 双平台都要(YouTube 的「PO token 在 URL 里就不用头」是错结论,实测每条新流都 403)。
页面可以埋「给 LLM 看的指令」。三层防御:
-
<template>与 HTML 注释在 Readability 解析前剥除; - CSS 隐藏元素(display/visibility/opacity/font-size:0/零尺寸盒)在活文档上打标、克隆后剥除、随后即刻去标(页面不留变异);只剩含非空 textContent 的元素参与检查(控成本);
- 输出文本剥零宽字符、控制字符、未配对 UTF-16 代理项(pair-aware 正则——一刀切会杀掉合法 emoji)。
executeScript 只序列化单个注入函数——helper 必须内嵌(ADR-0009;countImages 曾因是模块级兄弟而在真 Chrome ReferenceError,测试拼接了函数体所以看不出来)。
- 点 cookie 同意按钮:容器门 + 危险词否决(购买/删除/支付/清除/重置…中英)。
- 展开 read-more:不点任何可导航的
<a href>(真事故:品牌链接导致 mid-attach 跳页);chrome 区排除(nav/aside/[role=…],GitHub 巨型菜单与 labuladong 事故各加固一轮);点开后弹出的对话框按取消文案关闭并终止本轮。 - 滚动加载信号门控(有懒加载/虚拟列表信号才滚);滚动用
opacity:0抑制绘制(不用 visibility——会被页面自己的 reveal 编排卡死);scrollY 恒恢复。 - GitHub
/blob/直接走 raw fast-path,跳过页面自动化(菜单污染克隆 DOM 的真案例)。
| 安装形态 | 扩展 ID |
|---|---|
| Chrome 商店 |
kghjmmajnpbkljankbbjbmnhfdocaeho(CWS 固定) |
| 仓库目录加载(manifest 带 key) |
apoodheofdhglelbnmggeokbhampbmgn(key 推导) |
| release zip 解包 | 路径推导,每台机器不同(打包会剥 key) |
chrome://extensions 里显示的 ID 是唯一事实源。本地网关用 ws://(wss 被拒);配置只在网关启动时读一次。
源头:AGENTS.md 渲染 sanitizer 三坑、preExtractCleanup、DNR、扩展 ID 细则等节;ADR-0008 / 0009。同步于 2026-10-01。
English
- Home
- Architecture
- Rendering Pipeline
- Storage Model
- Providers and Agents
- ASR and Video Analysis
- Security Model
- Design Decisions
- Contributing
中文
相关 / Related
日本語
한국어
Español
- Inicio
- Arquitectura
- Pipeline de renderizado
- Modelo de almacenamiento
- Proveedores y agentes
- ASR y análisis de vídeo
- Modelo de seguridad
- Decisiones de diseño
- Contribuir
Português
- Início
- Arquitetura
- Pipeline de renderização
- Modelo de armazenamento
- Provedores e agentes
- ASR e análise de vídeo
- Modelo de segurança
- Decisões de design
- Contribuindo
Русский