跳到正文

钱包盗取程序与代币授权:钱包究竟是怎么被清空的

大多数被盗的加密货币,并不是因为密码学被破解,而是由持有人自己签名送出去的。下面讲这个签名做了什么,以及如何避免签下它。

最近审阅:2026-09-14

原理

要让去中心化交易所交易你的代币,你需要给它一个授权(approval)——允许该合约从你的地址转走某种特定代币。在大多数界面中,授权默认是无限额的,而且不会过期。

这就是攻击的全部。一个恶意网站请求一个看起来很平常的授权,你签了名,然后这个合约就可以在任何时候把那种代币转走。你的助记词从未涉及其中。密码学也从未被破解。是你授权了它。

危险的签名长什么样

无限额度的 approve。 这在正规 DEX 上是标准做法,正因如此它看起来并不可怕。只把它授予你确实打算与之交易的合约。

increaseAllowance。 换了个名字的同一种东西。

Permit / Permit2 签名。 它们根本不会以交易的形式出现——它们是链下签名,所以没有 Gas 费让你停下来想一想。不需要 Gas 费的签名请求并不意味着自动安全;它往往是更危险的那一种。

setApprovalForAll。 用于 NFT。一个签名就能交出整个系列。

盲签一段十六进制数据。 如果你的钱包无法解析你要签的内容,而你也不确切知道为什么要签,答案就是不签。

这些请求从哪里来

  • 虚假的空投领取页面,通常通过被盗的社交媒体账号推广。
  • 真实协议的搜索广告,链接指向仿冒域名。请把真正的网站加入书签。
  • 在 Discord 和 Telegram 上主动私信你的“客服”。 真正的客服从不会这样做。
  • 被空投到你钱包里的诈骗代币。 它们显示着诱人的价值和一个网站名称。与它们交互正是陷阱所在。

实用的防御措施

撤销旧授权。 你多年前授予的每一个授权都仍然有效。定期在 revoke.cash 或 Etherscan 的代币授权检查器上检查。这需要花费 Gas,但值得。

设置支出上限。 MetaMask 允许你修改授权的额度。把它设置为大致等于你要交易的金额,就能把损失限制在这个数额以内。

使用两个钱包。 一个“热”钱包只放你正在使用的资金,另一个独立钱包从不在任何网站上签名。仅靠这一种拆分,大多数损失都可以承受。

把你输不起的余额放在硬件钱包里。 它无法阻止糟糕的授权——你在硬件钱包上同样可以签下这样的授权——但它能防止被入侵的电脑在你不知情的情况下签名。

每次都看清域名。 盗取网站的域名在字面上与真网站几乎一模一样。

正规的任何人都不会要你的助记词

客服不会。钱包“迁移”不会。验证者不会。固件更新也不会。不存在任何一种情况,需要某个人或某个网站知道那十二个或二十四个单词。任何向你索要的人都是在偷你的钱,没有例外。

相关工具

← 全部指南