工具台 · 独立评测,不收钱写好评
首页 / 指南 / 怎么撤销钱包的代币授权
安全 · 链上自保

怎么撤销钱包的代币授权(关掉被盗刷的那道后门)

你在 DApp 上点的那个「授权」,很多时候是把某个代币的支配权无限期交了出去。这篇把授权到底是什么、无限和限额差在哪、恶意合约怎么趁你不注意把币划走讲清楚,再手把手带你用 revoke.cash 和区块浏览器逐链检查、把不用的授权撤干净。

撤销代币授权:钱包授权列表、无限额度合约与 revoke.cash 一键撤销流程示意
你早就忘了的一个授权,可能还开着一道能把币划走的后门。这篇教你把它关掉。

我真正被授权这件事吓到,是有一次心血来潮去翻自己那个用了两年的主地址,想看看它到底给多少合约开过口子。结果列表拉出来一长条,好些个名字我压根想不起来是什么时候连过的——某个早就没在用的 DEX、某个玩过一次就卸了的小项目、某个当年为了领个纪念品连过的活动页。更让我后背发凉的是,其中不少额度那一栏写的都是「无限」。也就是说,这些我早忘光了的合约,理论上到今天都还揣着一把能动我这个代币的钥匙。那一刻我才意识到,链上真正危险的不是转账那一下,而是你随手签下、之后再没回头看过的一串授权。

这篇就专门讲这道最容易被忽视的口子。我尽量讲得具体:授权到底把什么权力交了出去、无限和限额差在哪、骗子怎么利用它、以及最关键的——怎么动手把不用的授权一条条查出来撤掉。都是我自己后来养成、也建议每个人都养成的习惯。看完你花二十分钟给自己的地址做一次体检,很可能就把一颗埋了很久的雷提前拆了。

授权(approve)到底是什么

先把概念说清楚,后面才好动手。你钱包里的代币,比如 USDT、USDC 这类,绝大多数是所谓的 ERC-20 标准代币(在别的链上有对应的等价物)。这类代币有一个设计:当你想让某个链上应用(DApp,比如一个去中心化交易所)帮你花这个代币时,应用自己是不能直接从你钱包里拿的——它得先经过你的授权(approve)。

所谓授权,本质上就是你对代币合约说了一句话:「我允许某某某这个地址,从我这里最多动用 X 数量的这个代币。」这句话记在链上,之后那个被授权的合约在这个额度以内,就可以不用你每次再签字,直接调走你的币去完成它该做的事。注意关键点:授权和实际转账是两回事。你授权的时候,币还在你钱包里没动;但你等于给对方留了一张「随时可以来取,取到 X 为止」的提货单。这张提货单一直有效,直到你主动把它撤销为止——它不会因为你关掉网页、卸载 App、甚至几个月不登录就自动失效。想把「钥匙归你、链上没人兜底」这个底层逻辑理顺,可以先看看我们的 Web3 钱包基础,理解了那层,你会更明白为什么这张提货单这么要命。

提示
记住一句话就够了:授权 = 你签发的一张长期有效的提货单,额度多大、给了谁,全由你签字那一下决定,且不会自动过期。后面所有的风险和撤销动作,都是围绕这张提货单展开的。

为什么每个 DApp 都要你先授权

很多人第一反应是:这么危险的设计,为什么还要有?其实授权机制本身不是坏东西,它是链上应用能正常运转的必要一环。设想一下,你在一个去中心化交易所里想用 USDT 换别的币,交易所的合约得能把你的 USDT 拿去撮合、划转。如果每一步都要你亲手签一次转账,体验会碎得没法用。授权就是把「允许它动我的币」和「它具体什么时候动、动多少」拆开:你先一次性授个权,之后的具体操作合约自己接管。

问题出在额度信任对象这两处。授权机制本身中立,但它把一个很大的信任前置了——你信不信这个合约只会规规矩矩地在你真实需要的范围内动你的币。正经的大项目,合约经过审计、逻辑公开,一般不会乱来;但你随手连的那些来路不明的小站、空投页、仿冒 DApp,它们请求的授权可能包着糖衣,实际是冲着掏空你来的。换句话说,授权这个动作没有原罪,有风险的是「授了多大额度」和「授给了谁」。关于怎么先一步识破那些专门来骗授权的假站假页,我在 怎么分辨假的加密 App 和钓鱼钱包 那篇里拆得很细,两篇配着看效果最好。

无限授权和限额授权,风险差在哪

这是整篇最该记住的一节。当一个 DApp 请求授权时,额度大致分两种:限额授权无限授权

限额授权:你需要多少,就给多少

限额授权就是把额度卡在你这次实际要用的数量上。比如你这次只想换价值一点点的 USDT,授权就只授这么多。这样即便对面合约有问题,它能动的也就是这一小笔的上限,超出去它无权碰。限额授权的好处是把风险锁死在一个很小的范围里,代价是下次你再想用得多,可能要再授一次权、多付一次手续费。

无限授权:一次签字,交出整个代币的支配权

无限授权(很多界面上写作 unlimited,或者一个大得离谱的数字)意味着你允许这个合约动用你这个代币的任意数量,直到你手动撤销为止。DApp 之所以爱默认给你弹无限授权,是因为这样你以后用它就不用反复授权了,体验顺滑。但代价是:只要这个合约将来出问题——被黑、跑路、或本来就是恶意的——它能划走的是你钱包里这个代币的全部,而不是一小笔。而且这道口子会一直开着,你今天授的权,可能在你早就忘了它存在的一年后被人利用。

这两者的风险差,说白了就是「最坏情况下你会损失多少」的差别:限额授权最坏也就丢那一小笔,无限授权最坏是这个代币清零。所以我的原则很简单——能限额就限额,尤其是面对不熟的应用;只有对少数长期在用、信得过的大项目,才考虑图方便开无限,而且要记在心里、定期回来撤。

当心
很多钱包在弹授权确认时,默认就帮你填了无限额度,你不改它就那么签了。签之前多看一眼额度那一栏,好一些的钱包(比如新版本的 MetaMask)允许你在确认界面手动把额度改成你实际需要的数字——花两秒改一下,可能就避掉了一场清零。

恶意合约是怎么靠授权瞬间盗刷的

把前面的概念串起来,你就能看懂骗局的完整链条了。恶意合约薅授权,通常是这么走的:先做一个看起来正常的页面——一个「空投领取」页、一个「限时铸造」页、一个仿得很像的 DEX,诱你连上钱包。你一连,它就弹出一个授权请求,界面上可能写得含糊,让你以为是在「领取」「验证」「激活」,其实你签下去的是把某个代币的无限支配权授权给它的合约

你签完那一下,往往什么异常都看不到——币还在你钱包里,页面可能还假模假样地显示「领取成功」。真正的收割发生在之后:对方的合约揣着你给的那张无限额度提货单,会在某个时刻(可能是当场,也可能是等你钱包里这个代币多起来的时候)直接调用转账,把币划到它自己地址。整个过程从链的角度看完全「合规」,因为授权确确实实是你亲手签的,没有任何一环需要它破解你的密码或私钥。这也是为什么这类损失几乎无法追回——不是系统被攻破了,是你授了权。

更阴的一点是时间差。有的恶意授权不会马上动手,而是潜伏着。你当时没损失,就以为没事,早把这次连接忘了。等哪天你往这个地址转进一大笔同种代币,潜伏的合约立刻把它划走。所以「当时没被划走」绝不等于「安全」,只要那个授权还开着,风险就一直在。这也正是定期检查、主动撤销之所以重要的根本原因——你不能指望恶意合约提醒你它还在。

用 revoke.cash 逐链检查并撤销

讲了这么多风险,好消息是:授权是可以随时撤销的,而且工具很成熟。最常用、最省心的一个是 revoke.cash,它把「查你这个地址给谁开过授权」和「一键撤销」这两件事做在了一起,界面也有中文。下面是我自己每次体检的流程,你照着走就行。

  1. 从可信入口打开工具,逐字核对域名。直接手敲或从收藏夹进 revoke.cash 中文站,别从聊天记录、搜索广告里点进去——撤销工具本身也有被仿冒的,仿站会引你把授权「撤」给它的另一个恶意合约。进去先对一眼地址栏那串字符。
  2. 连接钱包,或直接粘贴地址只读查询。你可以连钱包,也可以只把你的地址粘进去查看(只读查询不需要签任何字,更安全,适合先看个究竟)。真要撤的时候再连钱包。
  3. 一条链一条链地切着看。这是最容易漏的一步:授权是分链的。你在以太坊主网开的授权、在 BNB 链上开的、在 Polygon 上开的,是各自独立的三份清单。工具上方通常有切换网络的入口,你得把自己用过的每条链都切过去看一遍,只看一条链就以为查完了,是常见的漏网之处。
  4. 盯着「额度」和「授权对象」两栏挨个判断。重点看哪些是无限额度、授给的合约你还认不认得、这个应用你是不是早就不用了。凡是想不起来、用不上、或额度大得没道理的,都是撤销的候选。
  5. 逐个点撤销,钱包里确认交易。点撤销后钱包会弹出一笔交易请你签字——这一笔是把授权额度改回零的链上操作,是真实交易,需要付一点 gas。签完等它上链,那条授权就作废了。有多条要撤就一条条来。

把不用的授权撤干净之后,你会发现列表清爽了很多,心里也踏实。我现在的习惯是每隔一段时间、或者每次连过什么新的陌生 DApp 之后,就回来扫一遍。

提示
撤销工具再好用,也别放松对域名的警惕。撤销授权本身也要签一笔交易,仿冒的「撤销站」会把这一步偷换成「把你的授权转授给它」。认准官方域名、只读先查、签字前看清楚交易内容,这三步一个都别省。

用区块浏览器的授权检查器核一遍

除了 revoke.cash 这类聚合工具,各条链的官方区块浏览器自己也带授权检查功能,适合用来做交叉验证,或者你更信任浏览器官方入口时用。以以太坊为例,Etherscan 有一个专门的 Token Approval Checker,把你的地址填进去,就能列出这个地址对各个代币开过的授权、授给了哪个合约、额度多少。BNB 链上有对应的 BscScan 授权检查器,其他主流链的浏览器多半也有类似入口。

用浏览器检查器的好处,一是它是各条链的官方站,可信度高;二是信息展示得更原始、更全,适合你想弄清楚某个授权到底指向哪个合约地址时深挖。它同样支持连钱包后直接撤销,撤的时候一样是签一笔链上交易、付一笔 gas。我的建议是两类工具搭配用:聚合工具(revoke.cash)看得快、跨链方便,浏览器检查器用来对某条链、某个可疑授权做核实。核实合约地址真伪时,也可以顺手把地址过一遍我们的 地址格式校验器,先挡掉抄错、被投毒替换这类低级但要命的坑。

当心
别把「授权检查器」和「让你连钱包做别的操作的页面」搞混。真正的检查器只做两件事:列出你的授权、帮你发起撤销交易。任何在这个名义下还要你「输助记词同步」「支付一笔解锁费」的,都是假的——正经撤销从头到尾都不需要你的助记词。

撤销要付 gas,这钱值不值

得先给你打个预防针:撤销授权不是免费的。因为把额度改回零这件事,本身是一笔写进链里的交易,需要付网络手续费(gas)。所以如果你有一长串授权要撤,撤完会花掉一些手续费,链越拥堵、这笔费用越高。有人一看要花钱就退缩了,觉得「反正也没出事,撤它干嘛还倒贴」。

但换个角度算这笔账:你撤销花的是可预期的一点手续费,堵住的是一个最坏情况下能让你这个代币清零的口子。这两者根本不是一个量级。尤其是那些额度无限、又指向你早已不用或来路不明合约的授权,撤销的性价比极高——花小钱买断一个潜伏的风险,怎么算都划算。我的做法是分优先级:无限额度 + 陌生/弃用合约的,优先撤;大项目、还在常用、额度也限得住的,可以留着或降额。为了省手续费,也可以挑网络不那么忙的时候批量处理。别为了省那点 gas,把一颗随时可能引爆的雷继续留在身上。

日常授权卫生:几个长期省心的习惯

撤一次授权是应急,真正让你长期省心的是几个能变成本能的习惯。这几条我自己一直在用:

  1. 用完就撤。如果你只是为了用一次某个 DApp 才授的权,用完就顺手去撤掉,别让它一直挂着。授权不是「用完自动收回」的东西,你不撤它就永远开着。养成「一次性使用就一次性撤销」的习惯,你的授权列表会一直很干净。
  2. 能限额别开无限。面对不熟的应用,授权时把额度改成你这次实际要用的量,别贪那点顺滑签无限。多授一次的麻烦,换的是最坏情况从「清零」缩到「一小笔」。
  3. 脏地址隔离,大额别乱连。准备一个专门的「小号地址」去接触陌生 DApp、领空投、试新项目,里面只放你敢损失的小钱;主资产放在另一个地址,那个地址绝不拿去连来路不明的应用。这样就算某次授权踩雷,损失也被框死在小号里,动不了你的大头。关于怎么按金额和用途分配不同钱包,加密钱包怎么选 那篇讲得比较系统,热钱包放小额、大额往硬件钱包放,和授权隔离是同一套思路。
  4. 定期体检。给自己定个节奏,比如每隔一阵、或每次连过新的陌生应用之后,就用上面的工具把各条链扫一遍,撤掉不用的。这件事花不了多少时间,却是你链上安全里回报最高的动作之一。
撤销之后,把剩余大额资产撤回更省心的地方

撤销不是万能药:私钥/助记词泄露另说

最后必须泼一盆清醒的冷水,免得你撤完授权就以为万事大吉。撤销授权,只能解决「授权」这一类风险,管不了私钥或助记词已经泄露的情况。这是两件本质不同的事,别搞混。

授权,是你允许某个合约在一定额度内动你的某个代币——你交出去的是「有限的支配权」,你还是这个钱包的主人,撤销就能收回。但如果你的私钥或助记词泄露了(比如你曾把助记词输进过某个仿冒网页、截图存在了相册、或者设备中了木马),那对方拿到的是你整个钱包的全部控制权——他能在自己设备上原样恢复你的钱包,把里面所有的币、所有链上的资产直接转走,根本不需要经过任何授权。这种情况下,你撤再多授权都没用,因为口子不在授权那里,而在钥匙本身已经不是你独有的了。

所以处理逻辑完全不同:授权出问题,撤销就行,钱包还能继续用;但只要你怀疑私钥或助记词可能泄露,这个钱包就当废了——别再往里放一分钱,赶紧在一台干净的设备上新建一个钱包,把还能救的资产迁过去。助记词这条底线怎么守,我在 MetaMask 评测OKX Web3 钱包评测 里都反复强调过:它只该出现在钱包让你备份、和你亲手恢复自己旧钱包这两个时刻,任何网页、表单、客服窗口里要你输助记词的,无一例外是来抢钱的。想把链上安全模型系统看一遍,以太坊官方的 安全页面 讲得很全、不带销售腔;钱包操作层面的具体问题,也可以查 MetaMask 官方支持

把这两层分清楚,你对自己钱包的安全就有了一张更完整的地图:授权是能随时收回的后门,定期撤、撤干净;钥匙是绝不能外泄的总闸,守死它。撤销授权是每个链上用户都该会、也该定期做的基本功——它拦不住所有风险,但它能拦下那一大类你最容易忽视、又最容易被人钻空子的风险。今天就抽二十分钟,给你的地址做一次体检吧,把那些你早就忘了的提货单,一张张收回来。

陈未(笔名)
工具台编辑 · 钱包 / 链上方向

笔名,写钱包和链上这块。开头那次翻出一长串自己都忘光的无限授权,是真事,也正是从那以后我养成了定期给地址做授权体检的习惯。这篇尽量按我当年希望有人早点提醒我的方式写。不放社交链接,有疑问走更正页