TL;DR
钱包被清空,多数不是因为私钥被偷,而是你在 MetaMask 里签了一个看不懂的签名。 签名(sign)和授权(approve)、交易(send)是三种完全不同的操作——其中最容易被忽略、也最容易丢钱的是签名:尤其是 Permit 这类”链下签名”,它不用付 gas、不在交易历史里留下任何记录,攻击者拿到签名后自己上链就能把币转走,受害者直到币没了还以为是”什么都没点”。据 CertiK 数据,2025 年钓鱼攻击造成约 7.23 亿美元损失、涉及 248 起事件1。守住钱包只需要一句话:任何弹窗里读不懂的内容,一律不签。下面先讲清签名和授权、交易的区别,再逐一拆解四种签名与风险等级,最后给一份”签名前必查清单”和”中招后怎么办”。
先分清三种「同意」:交易、授权、签名
新手最容易在这里栽跟头——MetaMask 弹出的每一个确认框,本质上是三种不同的东西。分清它们,你才知道哪一步把资产的处置权交了出去。
| 操作 | 你在做什么 | 会留下记录吗 | 能不能撤销 |
|---|---|---|---|
| 交易(send) | 主动发起一笔转账/合约调用,要付 gas | ✅ 交易历史可见 | ❌ 上链即不可逆 |
| 授权(approve) | 链上交易,允许某合约在额度内动用你的代币 | ✅ 交易历史可见 | ✅ 可撤销(付 gas) |
| 签名(sign) | 给一条消息做数字签名,通常不付 gas | ⚠️ 可能无任何记录 | ⚠️ 看类型,多数难撤销 |
一句话记住:授权是”给了额度、上链可查、能撤销”;签名是”给了指令、可能无痕、难撤销”。 而签名钓鱼最危险的地方,恰恰在于它绕过了”撤销授权”这整套防御——因为链下签名在被执行前,你根本看不到一条可撤销的记录。
想先搞懂”授权”(approve)怎么撤销,看这篇 DeFi 授权安全:如何撤销不再使用的合约授权;本文专注讲更隐蔽的”签名”这一面。
什么是签名?为什么「签个字」就能丢钱
签名(Signature)是你用私钥对一条消息做数字签名,证明”这个地址同意这条消息的内容”。 它本身往往不产生链上交易、不用付 gas,所以很多人会掉以轻心,把它当成一次普通的”登录”或”连接钱包”。
问题在于:这条消息的内容可以是任意的——它可以是”允许某合约动用我的 USDC”,也可以是”把 10 个 ETH 转给某地址”。攻击者要做的,只是把一段恶意的内容包装成你懒得读、或者读不懂的形式,诱导你点下”签名”。
这跟”授权钓鱼”最大的区别在于可察觉性:
- **授权(approve)**是一笔链上交易,你可以在钱包交易历史、区块浏览器里看到它,事后还能撤销。
- **签名(sign)**尤其是 Permit 这类,是纯链下的,你的交易历史里没有任何痕迹,你甚至不知道自己在什么时候”授权”了谁。
这就是为什么那么多受害者会说”我什么都没做,币就没了”——他们确实没做任何链上交易,只是签了一次名。
四种签名类型与风险等级
MetaMask 里可能出现的签名请求,风险从高到低,认清这四种基本就够了。
| 签名类型 | 弹窗长什么样 | 风险 | 处理 |
|---|---|---|---|
| eth_sign | 一串十六进制原始数据,看不懂 | 🔴 极高 | 一律拒绝 |
| Permit / Permit2 | 看起来像”授权”,但无 gas、无交易记录 | 🔴 极高 | 核对 spender/金额/deadline |
| personal_sign | 一段可读文本或 JSON | 🟡 中 | 逐字读内容 |
| signTypedData(EIP-712) | 结构化字段,相对可读 | 🟡 中 | 核对关键字段 |
eth_sign 是最危险的盲签。 它允许你对任意原始数据签名,MetaMask 弹出的往往是一串十六进制。攻击者可以把”把代币转给我”的指令打包成这串数据诱导你签,然后在链上执行。MetaMask 对 eth_sign 有红色风险提示,主流钱包(imToken、OneKey)已经直接禁用或强警示。只要弹窗里出现 eth_sign,一律拒绝,没有例外。
personal_sign 和 signTypedData 相对可读,会显示文本或结构化数据,但攻击者同样能用”盲签”套路:把关键字段藏在一堆你懒得读的字段里。判断标准不是”是不是官方”,而是”弹窗里写的 spender、金额、deadline 我是不是都读懂了”。
Permit(EIP-2612)是近年损失最惨重的一类,下面单独讲。
Permit 与 Permit2:最难察觉的链下签名钓鱼
Permit 允许你只用一次链下签名就完成代币授权,不用付 gas、也不会在交易历史里留下记录——这正是它危险的地方。 受害者往往以为”我只是登录了一下”或”签了个字领空投”,实际上已经把代币的处置权交给了攻击者。
攻击流程是这样:攻击者诱导你签下一条恶意 Permit 签名 → 攻击者自己支付 gas 在链上调用 permit 完成授权 → 再调用 transferFrom 把你的代币转走。全程你没有任何链上交易、没有任何 gas 支出、交易历史干干净净,直到币没了才发现。
真实案例印证了这类攻击的严重性:
此外还有 Permit2——Uniswap 推出的共享授权合约。如果你此前在 Uniswap 上授权过 Permit2,攻击者只需再钓你一个签名,就能借 Permit2 的 permit 和 transferFrom 把你的币转走,等于把”一次授权”变成了”永久的签名入口”。
这类攻击能被规模化,背后是一条成熟的黑色产业链——DaaS(Drainer-as-a-Service,钱包清空即服务):开发者把恶意合约、钓鱼页面模板、自动扫荡脚本打包成工具包,出租给不懂技术的骗子,按盗取金额分成(通常 20–30%)。已知的服务有 Inferno、Pink、Angel、Monkey、Venom 等。这也是为什么签名钓鱼的”点击率”和损失能持续攀升——它把技术门槛降到了零。
签名前必查的 5 件事
养成一个习惯:任何一次确认前,先停一秒,逐项核对下面五条。
- spender(授权对象)地址——是不是你要交互的协议官方合约?陌生地址直接拒绝。
- 金额——是”有限额度”还是”无限(unlimited)“?能设有限就设有限。
- deadline(有效期)——合法的 Permit 通常带一个截止时间,没有截止时间的要多留个心眼。
- 是不是 eth_sign——出现 eth_sign 盲签一律拒绝。
- 有没有索要助记词/私钥——任何要求输入或”验证”助记词的,都是骗子,MetaMask 官方永远不会要。
一句话判断标准:如果你读不懂这个弹窗在说什么,就不要签。 宁可错过一次空投,也不要签下一个看不懂的签名。
钱包被签名钓鱼清空后怎么办
先判断是哪种情况,处理方式完全不同。
情况 A:只是签了 Permit/授权类签名,助记词没泄露。 立刻去 Revoke.cash 或区块浏览器查看并撤销相关授权,然后把剩余资金转到一个新钱包。这类攻击越早撤销,剩下的钱越安全。
情况 B:助记词/私钥已经泄露(出现扫荡机器人)。 如果发现”你刚转进去就立刻被转走”,说明私钥已泄露,撤销授权没用——攻击者用你的私钥就能操作一切。这时立刻放弃这个钱包:新建一个钱包,把还没被转走的资产(如有)转过去,旧钱包永久停用。助记词安全详见助记词与私钥安全指南。
情况 C:怀疑签了 eth_sign 或 EIP-7702 委派。 eth_sign 盲签可能是一次性的转账指令,EIP-7702 甚至能一次签名就把你整个地址委派给攻击者合约。这类情况最稳妥的做法是直接把剩余资产迁到一个全新钱包,不要试图在旧钱包上补救。
需要说清楚:一旦币已被转走,追回基本无望。 区块链执行的是你自己签名过的指令,专家普遍认为找回概率”趋近于零”。所以签名安全只能靠事前防御,不能靠事后补救。
长期防护:把签名风险降到最低
把下面四条固化成习惯,就能挡住绝大多数签名类盗窃:
- 独立热钱包 + 硬件钱包分离。 用一个只放少量资金的钱包去连各种 DApp(打新、领空投、薅羊毛),大额资产放在硬件钱包(Ledger/Trezor)或冷钱包里,日常热钱包里只留你输得起的金额。钱包分层怎么选,看加密货币钱包完全指南。
- 养成”读弹窗”的肌肉记忆。 每次签名、授权、交易前,把上面”5 件事”过一遍,读不懂就拒绝。
- 用支持交易模拟的钱包。 部分钱包会在签名前模拟并翻译成”人话”(如”这次签名将授权 X 合约动用你全部 USDC”),优先使用这类钱包或开启相关功能。
- 永远从官方入口进入。 手动输入或收藏网址,不点搜索结果里的广告、不点私信/邮件里的链接——钓鱼网站是所有这些手法的第一落点。更系统的防钓鱼方法见加密货币防钓鱼完全指南。
如果你还没装钱包,先从MetaMask 钱包安装与安全教程开始。
常见问题 FAQ
钱包什么都没点就被清空了,是怎么回事?
多半是你之前签过一个看不懂的签名。签名钓鱼(尤其是 Permit)允许攻击者在链下拿到你的授权,之后再上链把你的币转走——整个过程没有交易记录、不用你二次确认。据 CertiK 数据,2025 年钓鱼攻击造成约 7.23 亿美元损失、涉及 248 起事件1。
签名和交易、授权到底有什么区别?
交易是你主动发起的转账,上链后不可逆;授权(approve)是一笔链上交易,允许某合约在额度内动用你的代币,可撤销;签名(sign)是给一条消息做数字签名,本身可能不产生链上交易,但可能把你的授权或转账意图交给别人。最容易丢钱的是签名——尤其是 Permit 这类”链下授权”。
Permit 签名是什么?为什么不用付 gas 也能被盗?
Permit(EIP-2612)允许你只用一次链下签名就完成代币授权,不用付 gas、也不会在交易历史里留下记录。攻击者诱导你签下恶意 Permit,再自己上链调用 permit 完成授权并转走代币。典型案件包括一名用户损失约 44 万美元 USDC、另一个老钱包被清空约 650 万美元的 stETH 与 aEthWBTC。
看到 eth_sign 应该怎么办?
一律拒绝。eth_sign 是对任意原始数据做盲签,弹窗往往是一串看不懂的十六进制,攻击者可以把”转走我的币”打包成这串数据诱导你签。MetaMask 对它弹红色风险提示,主流钱包已直接禁用或强警示。凡是出现 eth_sign,直接点拒绝。
已经签了可疑的签名,还能补救吗?
分情况。如果只是签了 Permit 授权类签名,立刻去 Revoke.cash 或区块浏览器查看并撤销该授权,再把剩余资金转到一个新钱包,越快止损效果越好。但一旦币已被转走,追回基本无望——区块链执行的是你自己签名过的指令,找回概率趋近于零。
撤销授权能防住签名钓鱼吗?
不能完全防住。撤销授权只能撤销你之前签过的链上 approve 授权,但签名钓鱼尤其是 Permit 是”链下签名”,在它被上链执行前你根本看不到一条可撤销的授权记录。真正的防线是签名前读懂弹窗、拒绝盲签,配合独立热钱包和硬件钱包分层存放资产。
怎么判断一个签名能不能签?
签名前逐项核对:①spender(授权对象)是不是你认识的协议官方合约;②金额是有限还是无限;③有没有 deadline 有效期;④是不是 eth_sign 盲签;⑤有没有索要助记词。任何一条对不上、或你读不懂弹窗在说什么,就拒绝。
延伸阅读
- DeFi 授权安全:如何撤销不再使用的合约授权 — 签名钓鱼的”兄弟题”,讲清链上授权怎么撤销
- 助记词与私钥安全指南 — 签名泄露之外的另一大风险:助记词保管
- 加密货币防钓鱼完全指南 — 授权钓鱼、地址投毒、仿冒网站等 7 种手法的系统拆解
- 链上指南 — 更多区块链与 Web3 安全科普内容
还没加密资产? 先在交易所买好币再提到自己的钱包。币安 Binance(邀请码 BINANBT)|欧意 OKX(邀请码 60895497)
免责声明:本文内容仅供学习参考,不构成投资建议。加密货币投资有风险,请根据自身情况谨慎决策。