DROPCRUX

首页 / 文章 / 防骗

领空投要签授权,风险到底在哪

在链上损失资产的案例里,最常见的不是「投入白费」, 而是签了一个自己没看懂的授权,然后原本就有的钱被转走了。 这篇把授权这件事拆开:它和转账有什么本质区别、 「无限额度」到底意味着什么、签名弹窗里哪几个字段决定了你交出去什么。

领空投要签授权,风险到底在哪 · 示意图由本站绘制

转账和授权,差在哪

转账是「我现在把这些币给你」, 授权是「以后你随时可以从我这里拿走这些币」。 后者的危险在于它是持续有效的,而且额度经常被设成无限。

这两件事在钱包里都表现为「弹一个窗,你点确认」, 外观上区别不大,后果却完全不同。 这个外观上的相似,正是大量资产损失的根源。

为什么需要授权这个东西

先说清楚它不是一个设计缺陷,而是必要的机制。

链上的代币是由一段程序管理的。当你想在某个协议里用你的代币—— 比如拿去兑换、拿去提供流动性——那个协议的合约必须能够动用你的代币。 但它不能直接从你的余额里拿, 所以需要你先明确地说一句「我允许这个合约动用我的某某代币,额度是多少」。 这句话就是授权。

授权完成之后,那个合约在你给定的额度内, 可以在任何时候把对应的代币从你的地址转走, 不需要你再次确认。 这是它方便的地方,也是它危险的地方。

「无限额度」到底意味着什么

意味着你授权的对象可以在任何时候, 把你地址里这个代币的全部余额转走, 而且今天转不完,明天你再存进来它还能继续转。

为什么这么普遍?因为体验好。 如果每次操作都按实际数量授权一次, 你每做一笔就要多签一次、多付一次手续费。 所以很多界面默认帮你填一个极大的数字, 大到实际上等于没有上限。

大部分时候这不出事,因为你授权的是一个正常的协议。 但它有三种出事的方式:

第三条特别要注意:授权不会自动过期。 你三年前用过一次的某个协议, 如果当时给了无限额度,那个授权到今天还在。

签名弹窗里该看哪几个字段

四个:请求类型、被授权的对象、额度、以及代币是哪一个。

四个字段,看懂了这一整类风险就基本关上了。

下面这四项在不同钱包里的叫法和位置不同,但含义是一致的。 我们把一个典型的授权窗口拆成图放在 签名弹窗该看什么里, 可以点开每个字段看说明。

一、请求类型

先分清这是一次转账、一次授权,还是一次纯粹的消息签名。 钱包通常会用不同的措辞提示,比如「授予权限」「允许访问」 和「发送」是不一样的。如果钱包只显示一串十六进制数据、 没有给出人类可读的说明,那就属于「看不懂」的情况, 不要签。

二、被授权的对象

这个地址是谁?它和你以为在交互的项目对得上吗? 一个实用的做法是:把这个地址复制出来, 到区块浏览器上看一眼——它是不是一个已经验证过的合约、 有没有大量正常的历史交互。 一个刚创建不久、几乎没有历史的地址,是很强的警示信号。

三、额度

这是最关键的一项。看它是一个具体的数量, 还是一个大得离谱的数字(或者直接写着「无限」)。 很多钱包允许你在签名前把额度改小—— 改成你这次实际需要的数量。 这个动作会让你多付一点手续费(下次用还要再授权), 但它把风险限制在了一个具体的数额上。

四、涉及哪个代币

确认它要的是你以为的那个代币。 有一类攻击是让你授权一个和你要操作的代币不同的、 但你余额更大的代币。

一条硬规则 如果这四项里有任何一项你看不懂或者对不上, 就不要签。不签最多是错过一次机会, 签错可能是全部余额。这两个代价不在一个量级上。

还有一类更隐蔽的签名

有些签名不发起链上交易、不花手续费, 但它同样可以授予权限,而且往往显示得更不清楚。

链上的授权是一笔交易,你能看到手续费, 心理上会警觉一些。但还存在另一类「离线签名」—— 你签一段数据,这段数据本身不上链, 但对方拿着它可以在之后代替你去链上执行某些操作。 这类签名的危险在于:它不花钱,所以你不警觉; 它显示的内容通常更抽象,所以你更看不懂。 很多钓鱼页面用的就是这一类—— 先让你签一个「验证你是钱包所有者」的无害签名建立信任, 再让你签真正有杀伤力的那一个。

处理原则一样:看不懂就不签。 另外,任何要求你签名的场景, 先确认自己是怎么进到这个页面的—— 入口比签名内容更早决定了安全与否, 这一层在假空投网站怎么识别里讲。

几种你会遇到的权限请求

除了标准的代币授权,还有几种形态, 它们的杀伤力不同,但都值得看清楚。

单个代币的额度授权。最常见的一种, 前面讲的就是它。要看的是额度和对象。

  1. 整个集合的操作权限。某些资产类型的授权是 「允许对方操作你这一整类资产」, 而不是「允许操作多少数量」。 这种授权没有额度可以调小, 只有给或不给两个选择,所以要格外谨慎。
  2. 批量授权。有些界面会用一次操作 同时给出多个代币的权限,理由是「省手续费」。 方便,但也意味着一次点击的后果更大。 签之前要看清楚它列了哪些代币。
  3. 离线的授权签名。不上链、不花手续费, 但对方拿着这个签名可以在有效期内代替你去链上执行授权。 因为不花钱,人往往更不警觉。 这一类的显示内容通常更抽象, 如果钱包给不出人类可读的解释,就不要签。
  4. 纯身份签名。有些网站会让你签一段文字来证明 「你控制这个地址」,用于登录。 这一类通常是安全的——它不授予任何转移资产的权限。 但前提是你能看到那段文字、并且它读起来确实是一句登录声明, 而不是一串你看不懂的数据。

分辨这几种的最实用办法, 就是看钱包给出的人类可读描述。 现在的主流钱包在这方面做得比几年前好很多, 但仍然存在描述不清的情况—— 遇到描述不清的,一律按「看不懂」处理。

怎么收回已经给出去的授权

撤销授权是把额度改成零,这是一笔链上交易, 要付手续费,而且只对你主动撤销的那一条生效。

操作层面:主流钱包里通常能找到查看和管理已授权合约的入口, 在那里可以逐条把不再需要的额度撤销掉。 撤销是一笔交易,所以要付 Gas; 授权条目多的时候,清理一次的成本不低。

几个要点:

顺序很重要 如果你怀疑自己刚刚签了一个恶意授权, 先把资产转到一个用全新助记词生成的干净地址, 再回头撤销。因为撤销要排队确认, 这段时间里资产还在原地,而对方可以立刻动手。

几个能长期降低风险的做法

给自己定一个检查节奏

授权风险的特点是它会累积, 所以对付它的办法也应该是周期性的,而不是一次性的。

这件事没人会提醒你做。

建议按这个节奏来:

做这些事都要付手续费,所以有人会觉得不值得。 但可以这样想:清理的成本是明确且很小的, 不清理的潜在损失是你地址上的全部余额。 这个对比不需要犹豫。

放回整件事里看

授权风险是链上参与的固有成本之一, 它不体现在 Gas 账单上,但它是真实存在的暴露面。 参与得越多、连过的页面越多,这个面就越大。

所以在决定要不要走链上这条路的时候, 这一项应该被算进去:你不只是在花手续费和时间, 你还在把自己的资产持续暴露在需要判断力的场景里。 如果你对自己的判断力没有把握, 那么另一条路 在这一项上的暴露要小得多。

常见问题

转账和授权有什么区别

转账是现在把币给对方,一次性的;授权是允许对方以后随时从你这里转走指定额度的币,持续有效,不需要你再次确认。

无限额度授权意味着什么

被授权方可以在任何时候把你地址里该代币的全部余额转走,而且今天转不完,明天你再存进来它还能继续转。授权不会自动过期。

签名弹窗该看哪几个字段

请求类型(转账还是授权)、被授权的对象地址、额度是具体数量还是无限、以及涉及的是哪一个代币。任何一项看不懂或对不上就不要签。

不花手续费的签名是不是就安全

不是。有一类离线签名不上链、不花钱,但对方可以拿着它之后代替你执行操作。正因为不花钱,人反而更不警觉。

怎么撤销已经给出去的授权

在钱包的授权管理入口里逐条把额度改成零,这是链上交易要付手续费。撤销只能阻止后续被转,无法追回已经转走的资产。

怀疑签错了该先做什么

先把资产转到一个用全新助记词生成的干净地址,再回头撤销授权。撤销要排队确认,这段时间资产还在原地。

本文讲方法与判断,不是任何项目的推荐,也不构成投资建议。发现事实错误请发到 [email protected],我们会改并记在更正记录里。