在链上损失资产的案例里,最常见的不是「投入白费」, 而是签了一个自己没看懂的授权,然后原本就有的钱被转走了。 这篇把授权这件事拆开:它和转账有什么本质区别、 「无限额度」到底意味着什么、签名弹窗里哪几个字段决定了你交出去什么。
转账和授权,差在哪
转账是「我现在把这些币给你」, 授权是「以后你随时可以从我这里拿走这些币」。 后者的危险在于它是持续有效的,而且额度经常被设成无限。
这两件事在钱包里都表现为「弹一个窗,你点确认」, 外观上区别不大,后果却完全不同。 这个外观上的相似,正是大量资产损失的根源。
为什么需要授权这个东西
先说清楚它不是一个设计缺陷,而是必要的机制。
链上的代币是由一段程序管理的。当你想在某个协议里用你的代币—— 比如拿去兑换、拿去提供流动性——那个协议的合约必须能够动用你的代币。 但它不能直接从你的余额里拿, 所以需要你先明确地说一句「我允许这个合约动用我的某某代币,额度是多少」。 这句话就是授权。
授权完成之后,那个合约在你给定的额度内, 可以在任何时候把对应的代币从你的地址转走, 不需要你再次确认。 这是它方便的地方,也是它危险的地方。
「无限额度」到底意味着什么
意味着你授权的对象可以在任何时候, 把你地址里这个代币的全部余额转走, 而且今天转不完,明天你再存进来它还能继续转。
为什么这么普遍?因为体验好。 如果每次操作都按实际数量授权一次, 你每做一笔就要多签一次、多付一次手续费。 所以很多界面默认帮你填一个极大的数字, 大到实际上等于没有上限。
大部分时候这不出事,因为你授权的是一个正常的协议。 但它有三种出事的方式:
- 你授权的对象本来就是恶意的—— 你以为在和某个项目交互,实际上那是个仿冒页面, 授权给的是攻击者的合约。
- 那个合约后来出了问题—— 被攻击、有漏洞、或者被有权限的人滥用。 你几个月前签的授权,这时候还在生效。
- 你早就忘了自己签过—— 这是最普遍的一种。参与过几十个项目之后, 你的地址上挂着一堆你完全不记得的授权。
第三条特别要注意:授权不会自动过期。 你三年前用过一次的某个协议, 如果当时给了无限额度,那个授权到今天还在。
签名弹窗里该看哪几个字段
四个:请求类型、被授权的对象、额度、以及代币是哪一个。
四个字段,看懂了这一整类风险就基本关上了。
下面这四项在不同钱包里的叫法和位置不同,但含义是一致的。 我们把一个典型的授权窗口拆成图放在 签名弹窗该看什么里, 可以点开每个字段看说明。
一、请求类型
先分清这是一次转账、一次授权,还是一次纯粹的消息签名。 钱包通常会用不同的措辞提示,比如「授予权限」「允许访问」 和「发送」是不一样的。如果钱包只显示一串十六进制数据、 没有给出人类可读的说明,那就属于「看不懂」的情况, 不要签。
二、被授权的对象
这个地址是谁?它和你以为在交互的项目对得上吗? 一个实用的做法是:把这个地址复制出来, 到区块浏览器上看一眼——它是不是一个已经验证过的合约、 有没有大量正常的历史交互。 一个刚创建不久、几乎没有历史的地址,是很强的警示信号。
三、额度
这是最关键的一项。看它是一个具体的数量, 还是一个大得离谱的数字(或者直接写着「无限」)。 很多钱包允许你在签名前把额度改小—— 改成你这次实际需要的数量。 这个动作会让你多付一点手续费(下次用还要再授权), 但它把风险限制在了一个具体的数额上。
四、涉及哪个代币
确认它要的是你以为的那个代币。 有一类攻击是让你授权一个和你要操作的代币不同的、 但你余额更大的代币。
一条硬规则 如果这四项里有任何一项你看不懂或者对不上, 就不要签。不签最多是错过一次机会, 签错可能是全部余额。这两个代价不在一个量级上。
还有一类更隐蔽的签名
有些签名不发起链上交易、不花手续费, 但它同样可以授予权限,而且往往显示得更不清楚。
链上的授权是一笔交易,你能看到手续费, 心理上会警觉一些。但还存在另一类「离线签名」—— 你签一段数据,这段数据本身不上链, 但对方拿着它可以在之后代替你去链上执行某些操作。 这类签名的危险在于:它不花钱,所以你不警觉; 它显示的内容通常更抽象,所以你更看不懂。 很多钓鱼页面用的就是这一类—— 先让你签一个「验证你是钱包所有者」的无害签名建立信任, 再让你签真正有杀伤力的那一个。
处理原则一样:看不懂就不签。 另外,任何要求你签名的场景, 先确认自己是怎么进到这个页面的—— 入口比签名内容更早决定了安全与否, 这一层在假空投网站怎么识别里讲。
几种你会遇到的权限请求
除了标准的代币授权,还有几种形态, 它们的杀伤力不同,但都值得看清楚。
单个代币的额度授权。最常见的一种, 前面讲的就是它。要看的是额度和对象。
- 整个集合的操作权限。某些资产类型的授权是 「允许对方操作你这一整类资产」, 而不是「允许操作多少数量」。 这种授权没有额度可以调小, 只有给或不给两个选择,所以要格外谨慎。
- 批量授权。有些界面会用一次操作 同时给出多个代币的权限,理由是「省手续费」。 方便,但也意味着一次点击的后果更大。 签之前要看清楚它列了哪些代币。
- 离线的授权签名。不上链、不花手续费, 但对方拿着这个签名可以在有效期内代替你去链上执行授权。 因为不花钱,人往往更不警觉。 这一类的显示内容通常更抽象, 如果钱包给不出人类可读的解释,就不要签。
- 纯身份签名。有些网站会让你签一段文字来证明 「你控制这个地址」,用于登录。 这一类通常是安全的——它不授予任何转移资产的权限。 但前提是你能看到那段文字、并且它读起来确实是一句登录声明, 而不是一串你看不懂的数据。
分辨这几种的最实用办法, 就是看钱包给出的人类可读描述。 现在的主流钱包在这方面做得比几年前好很多, 但仍然存在描述不清的情况—— 遇到描述不清的,一律按「看不懂」处理。
怎么收回已经给出去的授权
撤销授权是把额度改成零,这是一笔链上交易, 要付手续费,而且只对你主动撤销的那一条生效。
操作层面:主流钱包里通常能找到查看和管理已授权合约的入口, 在那里可以逐条把不再需要的额度撤销掉。 撤销是一笔交易,所以要付 Gas; 授权条目多的时候,清理一次的成本不低。
几个要点:
- 撤销不是追回。如果对方已经把币转走了, 撤销挡不住已经发生的事,只能防止后续继续被转。
- 撤销要一条一条来。没有一个开关能把所有授权一次清空。
- 定期清理比出事后再清理便宜。 建议每隔一段时间看一眼自己签过什么, 把用不上的撤掉。
顺序很重要 如果你怀疑自己刚刚签了一个恶意授权, 先把资产转到一个用全新助记词生成的干净地址, 再回头撤销。因为撤销要排队确认, 这段时间里资产还在原地,而对方可以立刻动手。
几个能长期降低风险的做法
- 分地址。用一个只放少量资产的地址去连各种网站, 主资产放在一个从不连接任何页面的地址上。 这是性价比最高的一条。
- 额度按需给。能改小就改小, 多付的那点手续费买的是一个明确的损失上限。
- 定期清理。把「检查授权」当成一件每隔一段时间要做的事, 就像整理密码一样。
- 不在急的时候签。倒计时和「最后机会」是这类攻击的标配, 它们的作用就是让你跳过检查。
- 不签看不懂的东西。这条放在最后, 但它是所有做法里最有效的一条。
给自己定一个检查节奏
授权风险的特点是它会累积, 所以对付它的办法也应该是周期性的,而不是一次性的。
这件事没人会提醒你做。
建议按这个节奏来:
- 每次参与完一个活动。如果这个活动你已经不再参与了, 顺手把给它的授权撤掉。这时候撤销的成本最低, 因为你还记得自己签过什么。
- 每隔一段时间做一次全面检查。把地址上所有的授权列出来看一遍, 把不认识的、用不上的、额度过大的处理掉。 这件事的频率可以按你的活跃度来定—— 参与得多就勤一点。
- 在把大额资产转入某个地址之前。这是最关键的一个时点。如果一个地址挂着一堆历史授权, 那它就不适合放大额资产。 要么先清理干净,要么换一个从没连过网站的新地址。
- 看到任何相关的安全事件时。如果某个你用过的协议出了问题, 第一时间去看自己有没有给它授权,有就撤掉。
做这些事都要付手续费,所以有人会觉得不值得。 但可以这样想:清理的成本是明确且很小的, 不清理的潜在损失是你地址上的全部余额。 这个对比不需要犹豫。
放回整件事里看
授权风险是链上参与的固有成本之一, 它不体现在 Gas 账单上,但它是真实存在的暴露面。 参与得越多、连过的页面越多,这个面就越大。
所以在决定要不要走链上这条路的时候, 这一项应该被算进去:你不只是在花手续费和时间, 你还在把自己的资产持续暴露在需要判断力的场景里。 如果你对自己的判断力没有把握, 那么另一条路 在这一项上的暴露要小得多。
常见问题
转账和授权有什么区别
转账是现在把币给对方,一次性的;授权是允许对方以后随时从你这里转走指定额度的币,持续有效,不需要你再次确认。
无限额度授权意味着什么
被授权方可以在任何时候把你地址里该代币的全部余额转走,而且今天转不完,明天你再存进来它还能继续转。授权不会自动过期。
签名弹窗该看哪几个字段
请求类型(转账还是授权)、被授权的对象地址、额度是具体数量还是无限、以及涉及的是哪一个代币。任何一项看不懂或对不上就不要签。
不花手续费的签名是不是就安全
不是。有一类离线签名不上链、不花钱,但对方可以拿着它之后代替你执行操作。正因为不花钱,人反而更不警觉。
怎么撤销已经给出去的授权
在钱包的授权管理入口里逐条把额度改成零,这是链上交易要付手续费。撤销只能阻止后续被转,无法追回已经转走的资产。
怀疑签错了该先做什么
先把资产转到一个用全新助记词生成的干净地址,再回头撤销授权。撤销要排队确认,这段时间资产还在原地。
本文讲方法与判断,不是任何项目的推荐,也不构成投资建议。发现事实错误请发到 [email protected],我们会改并记在更正记录里。