ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

window.muxy桥与最小权限模型:Muxy如何打造安全的终端扩展系统

window.muxy桥与最小权限模型:Muxy如何打造安全的终端扩展系统 window.muxy桥与最小权限模型Muxy如何打造安全的终端扩展系统【免费下载链接】muxyLightweight and Memory efficient terminal for Mac built with SwiftUI and libghostty项目地址: https://gitcode.com/gh_mirrors/muxy1/muxyMuxy 是一款用 SwiftUI 和 libghostty 构建的轻量省内存 Mac 终端它的扩展系统靠window.muxy 桥让扩展 JavaScript 调用原生能力并用「清单权限 运行时同意」的最小权限模型守住每一次调用——即使扩展拿到全部声明权限敏感操作仍要用户点头。一、window.muxy 桥是什么对扩展作者来说桥就是注入到每个扩展网页里的window.muxy全局对象// 扩展面板中一行代码原生层替你检查权限 await window.muxy.panes.readScreen(paneID);它的实现链路非常短但每一环都带校验JS 注入层Muxy 为每个扩展生成一段桥脚本所有 API 调用统一收敛到__muxyDispatch(verb, args)失败时抛出error:permission denied (perm)。源码见 ExtensionBridgeJS.swift。消息处理层每个扩展的 WebView 绑定一个WKScriptMessageHandlerWithReply负责分发 verb、投递事件、管理生命周期如关闭前的beforeClose询问。源码见 ExtensionBridgeHandler.swift。API 调度层MuxyAPIDispatcher.dispatch在入口处强制执行第一步权限检查——verb 需要的权限若未在清单声明直接抛permission denied。源码见 MuxyAPIDispatcher.swift。一个关键设计背景脚本拿不到全部 API。panes、projects、files等状态与变更类 API 只对页面window.muxy和runScript命令开放常驻宿主进程中的background.js只能用受限子集详见 manifest.md。二、最小权限模型两层闸门Muxy 对每次扩展调用强制施加两层检查官方说明在 permissions.md第一层清单权限安装时声明扩展在package.json的muxy.permissions里声明所需权限组未声明的 verb 一律拒绝权限开放的能力panes:read读取终端屏幕、列出窗格与会话panes:write分屏、向终端发送文本/按键、关闭窗格git:read/git:write仓库状态读取 / 暂存、提交、推送等变更files:read/files:write工作区文件读取 / 写入与删除http无需声明出站请求纯运行时同意管控规则很朴素要什么写什么没写就没有。第二层运行时同意高危动词再问一次拥有权限 ≠ 无限制放行。以下动词即使权限齐全也会弹出原生确认框展示扩展名、动词和完整参数完整 argv、按键序列、窗格 ID 等exec— 在用户机器上启动子进程⌨️panes.send/panes.sendKeys/panes.readScreen— 向终端打字、按键、读屏git.*写操作、files.*写操作— 每次按具体操作记忆允许push不等于允许discardhttp.fetch— 按目标主机记忆允许api.example.com不覆盖其他域名且私网/回环地址在弹窗前直接被拦截实现位于 ExtensionConsentService.swift用户面对四个选项选项效果Allow remember放行并写入允许规则Allow仅本次放行Cancel仅本次拒绝Deny remember拒绝并写入拒绝规则勾选「Block all」可整类封禁如永久屏蔽exec弹窗还有一条容易忽视的安全细节弹窗 60 秒未响应自动按拒绝处理ExtensionConsentService.swift——恶意扩展无法靠「用户没注意」来蒙混过关。三、授权规则扩展无法自我授权权限决策的规则文件存放在~/Library/Application Support/Muxy/extension-grants.json由 Muxy 独占维护——扩展读不到、写不了自己的授权。规则模型支持argvPrefix、hostEquals、gitOperationEquals等细粒度匹配判定逻辑见 ExtensionGrantStore.swift其中拒绝规则优先于允许规则更具体的模式优先于宽泛模式。每次受控调用都会追加到extension-audit.log可在「设置 → Extensions → Permissions → Reveal Audit Log」中回溯每一次放行与拒绝。四、哪些操作不受权限管控Muxy 也明确划出了「天然安全」的边界不做过度设防muxy.dialog.*与muxy.modal.open—— 由用户亲自驱动的原生 UI无需权限extension.*本地事件 —— 只在同一扩展内部流动不跨边界CLI 客户端muxy命令—— 属于未标识调用者权限体系只约束已识别的扩展身份。完整列表见 permissions.md · What permissions dont gate。五、小结安全设计背后的取舍Muxy 的扩展安全架构可以浓缩为三条原则声明即上限清单权限是能力的天花板桥在调度入口统一拦截无法绕过敏感即弹窗跑代码、碰终端、写仓库、发网络这四类高危动词永远把决定权交回用户手中记录即透明授权规则由宿主独占 全量审计日志让「扩展到底能干什么」随时可查证。如果想动手体验可以直接阅读 get-started.md 上手第一个扩展或在 Muxy/Resources/starter-kits/vanilla/ 中找到官方起步模板——它的permissions字段正是理解最小权限模型的最佳入口。【免费下载链接】muxyLightweight and Memory efficient terminal for Mac built with SwiftUI and libghostty项目地址: https://gitcode.com/gh_mirrors/muxy1/muxy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表