转账动的是这一次的钱,授权交出去的是以后随时可以动你钱的权限。前者有明确的数额和终点,后者没有——这就是为什么授权类的损失往往发生在签名之后很久。
转账和授权不是一回事
转账:你把一笔确定数额的资产发送给某个地址,发完就结束了。金额是多少、发给谁,在你确认的那一刻全部确定。
授权:你允许某个地址在未来自行从你的钱包里转走某种资产,额度由这次授权决定。授权本身不移动任何资产,所以你确认之后余额不变。但从这一刻起,对方可以在任何时间、不需要你再次确认地行使这份权限。
授权机制本身不是漏洞,它是必要的。去中心化交易、质押、跨链桥这些功能都需要合约代表你转移代币,而这个"代表"就是通过授权实现的。以太坊官方文档对代币标准和授权机制有公开的技术说明。
问题出在两个地方:一是额度常常被设成没有上限,二是很多人不知道授权是长期有效的。这两点叠加,就构成了大部分授权类损失的基础。
"签名不花手续费,所以没风险"——这是新手最大的盲区
先说结论:不花手续费和没有风险是两回事。
钱包里的操作大致分两类。一类需要上链,要支付网络手续费;另一类只是让你用私钥对一段数据做签名,不上链,因此不花钱。很多人把"不花钱"直接理解成"不产生后果",这个推论是错的。
离线签名同样可以构成一份有效的授权。有一类标准化的做法允许用户通过签名一段结构化数据来授予代币转移权限,由对方在之后自行提交上链——相关规范可以参考 EIP-2612 的公开文本。对你来说,过程只是"点了一下确认",没有花钱、没有跳出交易记录;对对方来说,他手上已经拿到了可以直接使用的凭据。
这也是为什么钓鱼页面越来越偏好这种形式:它规避了用户对"要花钱"的警觉,而效果和一次链上授权是一样的。
把判断依据换掉
不要用"这一步要不要花钱"来判断风险。要用"这一步之后,谁能动我的资产"来判断。如果答案里出现了你之外的地址,不管花不花钱,都要停下来看清楚。
常见的几类签名请求
普通消息签名
最常见的是登录类签名——网站让你签一段文本以证明你控制这个地址。这类请求通常显示为可读的文字。风险在于:如果显示的内容是一串你看不懂的十六进制,那就不是普通消息,不要签。
代币授权
允许某个地址转移你的某种代币,额度由参数决定。弹窗里通常会显示代币名称、被授权的地址和额度。这是最需要看清额度的一类。
结构化数据的离线签名
就是上一节说的那种。它会以相对结构化的方式展示字段,但字段名往往是英文技术术语,对不熟悉的人来说和天书差不多。看不懂就是不签的理由,不是"应该没事"的理由。
批量转移授权
对于收藏品类资产,存在一种可以一次性授权某个地址转移你名下全部该系列资产的操作。它的危险程度最高,因为额度概念在这里不适用——给出去就是全部。
签名弹窗上,该看哪几个字段
四项,按重要性排序。任何一项看不懂或对不上,就直接取消。
| 字段 | 要确认什么 | 什么情况该取消 |
|---|---|---|
| 请求来源域名 | 弹窗顶部显示的网站域名,从右往左核对两段 | 与你以为的网站不一致,或域名陌生 |
| 操作类型 | 这是转账、授权,还是普通消息签名 | 你以为在做 A,弹窗显示的是 B |
| 被授权对象 | 获得权限的地址是谁 | 地址完全陌生,或与页面声称的合约对不上 |
| 额度 | 是具体数值,还是没有上限 | 额度远超你本次要用的数量 |
第一项最重要,而且最容易被跳过。钱包弹窗会显示发起请求的网站域名,这是钱包提供给你的一个免费的验真信息。它和地址栏的核对方法一样——从右往左取两段。核对域名的完整方法在怎么确认你下载的是真 App、打开的是真网站里。
"无限额度"到底意味着什么
意味着:只要你的钱包里还有这种代币,被授权的地址随时可以把它全部转走——包括你在授权之后才收到的那些。
很多应用默认申请无限额度,理由是省手续费:授权一次就够了,不用每次交易都重新授权。这个理由在正常场景下成立,代价是你把这种资产的长期支配权交给了那个合约。
实际的取舍是这样的:如果你信任这个合约、并且会长期频繁使用,无限额度是合理的便利;如果只用一次、或者对方是你刚认识的页面,就应该改成本次需要的具体数额。多数钱包在弹窗里都允许手动编辑额度,只是这个入口不显眼。
需要澄清一点:无限额度不等于立刻被盗。风险是在时间维度上累积的——合约可能之后被发现存在缺陷,或者项目方权限被滥用。所以处理方式不是恐慌,而是定期清理。
怎么查自己给过哪些授权
用区块浏览器提供的代币授权查询工具,输入你的钱包地址,就能列出当前仍然有效的授权。以太坊生态可以用 Etherscan 的代币授权查询页,其他链上的主流浏览器大多有对应功能。
多数主流钱包也在安全或设置菜单里内置了授权管理入口。MetaMask 官方帮助文档里有关于撤销代币授权的说明,可以对照操作。
查询时重点看三样:被授权的地址你认不认识、额度是不是没有上限、这个授权是什么时候给出去的。对于很久以前给过、现在已经不用的应用,直接撤销即可。
撤销授权的正确做法
撤销授权本身是一笔链上交易,需要支付网络手续费。这一点要先说清楚,因为它决定了合理的操作节奏。
由于每次撤销都有成本,更实际的做法是定期集中清理,而不是用完就撤。可以设一个固定的节奏,比如每隔一段时间打开授权查询页过一遍,把不再使用的一次性清掉。手续费较低的时段做这件事更划算。
如果是紧急情况——你刚在一个可疑页面上签过名——那就不要考虑手续费,立刻撤销,并把剩余资产转移到一个全新的、从未与任何页面交互过的钱包地址。断开网站连接不等于撤销授权,这是很多人会混淆的一点:断开连接只是停止这个页面继续读取你的地址,已经给出的授权仍然有效。
还有一种情况需要单独说:如果你签的是离线授权而对方尚未提交上链,撤销的窗口期非常短。这种时候最稳的做法是直接把资产转走,而不是试图撤销。相关的分支处理在被骗后 72 小时行动清单里按资产类型分开列了。
几个能显著降低暴露面的习惯
不需要技术背景也能做到的四件事
- 分钱包。用一个"交互钱包"去连接各种页面,里面只放当次需要的资产;长期持有放在另一个从不连接任何网站的地址上。这一条的效果超过其他所有措施的总和。
- 改额度。不常用的应用,把无限额度改成本次需要的数量。多花一点手续费,换掉长期敞口。
- 定期清理。固定节奏打开授权查询页,清掉不再使用的授权。
- 看不懂就取消。取消一个正常的签名请求,最多是重新操作一次;确认一个恶意请求,可能没有第二次机会。
最后强调一件事:助记词和签名授权是两个不同层面的风险。授权被滥用,损失的是被授权的那种资产;助记词泄露,损失的是这个钱包里的一切,而且无法通过撤销挽回。两者都要防,但后者更致命,细节见助记词为什么绝不能拍照、绝不能存云盘。
常见问题
签名不花手续费,是不是就没有风险?
不是。这是新手最大的认知盲区。离线签名不需要支付手续费,但它同样可以构成一份有效的授权,让对方在之后自行发起交易转移你的资产。不花钱和没风险是两回事。
转账和授权到底差在哪里?
转账动的是这一次的资产,数额确定、一次完成。授权给出的是一份权限,允许某个地址在未来自行转走你指定额度内的资产,不需要你再次确认。
签名弹窗里最该看的是哪几项?
看四项:请求来自哪个网站的域名、这次操作的类型是转账还是授权、被授权的对象地址、以及额度是具体数值还是没有上限。任何一项看不懂,就不要确认。
怎么知道自己给出过哪些授权?
用区块浏览器提供的代币授权查询工具,输入你的地址就能列出当前有效的授权及其额度。多数主流钱包也在安全设置里提供了授权管理入口。
撤销授权需要付手续费吗?
需要。撤销授权本身是一笔链上交易,要支付网络手续费。这也是建议定期集中清理、而不是每次用完都撤销的原因。