Caloogy 文章
English

浏览器扩展钱包的安全边界

日期
2026 年 7 月 14 日
系列
钱包
阅读
4 分钟
主题
WalletBrowser extensionMetamaskClipboard hijacking

一句话版本

MetaMask 这类扩展钱包把加密后的私钥存在浏览器里,网页通过一个注入的 JavaScript 接口(EIP-1193)向它发请求。它在易用性和安全之间取了一个中间点:比网页钱包安全(私钥不交给网站),比硬件钱包弱(私钥和恶意软件在同一台电脑上)。 主要威胁来自四个方向:假冒的扩展、其他恶意扩展、电脑上的木马(包括剪贴板劫持)、以及用户在恶意网页上点了"确认"。

全文分三层:

  1. 通俗理解:住在浏览器里的保险箱
  2. 实际用处:应用商店里的假钱包、剪贴板木马、信息窃取木马
  3. 原理与工程要点:扩展的隔离模型、权限、网页和钱包怎么通信、EIP-6963

第一层:通俗理解

1.1 住在浏览器里的保险箱

扩展钱包像一个住在浏览器里的保险箱:

1.2 但保险箱和小偷住在同一栋楼里

小偷 能做什么
恶意网页 只能发请求;骗你点确认是它唯一的办法
其他恶意扩展 如果有"读取和更改所有网站数据"的权限,可以篡改网页内容、监视你的输入
电脑上的木马 读取扩展的加密存储文件,再暴力破解密码;或者记录键盘,等你输入密码
剪贴板劫持木马 你复制一个地址,它悄悄替换成攻击者的地址

第二层:实际用处


第三层:原理与工程要点

3.1 扩展的隔离模型

组件 运行在哪里 能访问什么
后台(Service Worker) 扩展自己的源 加密的密钥库、扩展存储
弹窗(popup) 扩展自己的源 和后台通信
内容脚本 注入到每个网页里 网页的 DOM,但 JavaScript 环境是隔离的
页面注入的 provider(window.ethereum) 网页的环境里 只能通过消息向扩展发请求

关键点:私钥只存在于扩展自己的源里,网页和内容脚本都碰不到(同源策略在扩展上的应用,见《同源策略与子域名隔离》)。

3.2 网页怎么和钱包通信

EIP-1193 规定了 window.ethereum.request({ method, params }) 接口。常见方法:

方法 用途 风险
eth_requestAccounts 请求连接,获取地址 低,但会暴露你的地址
eth_sendTransaction 发送交易 要看清 to、value、data
personal_sign 签名消息 看内容是否可读
eth_signTypedData_v4 签结构化数据 Permit 钓鱼的主要载体(见《盲签与所见即所签》)
wallet_switchEthereumChain 切换网络 误导用户在错误的链上操作

EIP-6963(2023)解决了另一个问题:多个钱包扩展都想往 window.ethereum 里写,后安装的会覆盖先安装的,恶意扩展也可以借此冒充。EIP-6963 改为每个钱包通过事件广播自己的身份信息,网页列出来让用户选择。

3.3 权限是最大的风险因素

浏览器扩展可以申请"读取和更改你在所有网站上的数据"这样的宽泛权限。安装一个带这种权限的扩展,等于允许它修改你打开的任何网页,包括钱包要你确认的那个 DApp 页面。

建议:

3.4 对开发者的要求

3.5 什么时候该换硬件钱包

扩展钱包的根本局限是:私钥和潜在的恶意软件在同一台电脑上。日常小额用扩展钱包很方便;存放较大资产时,应当把扩展钱包作为硬件钱包的"界面"(扩展只负责展示和转发,签名在硬件设备上完成),见《硬件钱包的攻击面》。


总结

层次 要点
模型 私钥在扩展自己的源里,网页只能发请求
威胁 假扩展、恶意扩展、窃密木马、剪贴板劫持、骗你点确认
技术 EIP-1193 请求接口;EIP-6963 防覆盖冒充
建议 专用浏览器配置;最小化扩展;强密码;大额配硬件钱包