前言
2022年10月2日,国庆的第二天,一大早醒来就被推送到 TP 钱包的 transit swap 被黑了,金额还挺大,很多人一觉醒来发现钱包的钱都没了。真的很痛心。由此其实也引入了大家一直忽视的授权问题,希望这篇文章可以让大家后面有更好的安全意识,保护好自己的资产。
授权原理
根据 ERC20 标准,第三方(协议或者个人)在想转移你的代币的时候,都需要获得你的授权才可以转移代币。这就类似你开银行的支票黑别人,拿到你支票的人,其实就相当于获取了你银行账户的一定额度授权,就可以在额度范围内使用你的资金。
为了方便起见,一般在和协议交互的时候,项目方的网页都会让你设置无限授权,如下图:
无限授权虽然方便交互,并且如果你频繁地使用某些协议(如 Swap 类型的协议)的时候,重复授权不仅增加操作步骤,同时也会增加操作费用。但是无限授权意味着协议可以随时转走你的全部资金,就像你的银行账户,开了一个面额无限大的支票给第三方,一旦第三方作恶或者出现安全风险,你的全部资金就有可能血本无归。
安全的授权方式
许多用户并没有意识到无限授权带来的风险,在以前刚开始的时候,各种 钱包 APP 匹配也没有跟上,用户如果要操作授权的话,需要自己生成合约调用,技术门槛很高,但是目前的话,很多主流的钱包都已经适配授权额度的更改,以 imToken 为例,用户可以通过以下的 操作来更改授权额度。
除此之外,大家常用的 metamask 也支持代币额度的更改,大家可以参考他们的官方教程(https://metamask.zendesk.com/hc/en-us/articles/6055177143579-How-to-customize-token-approvals-allowances-with-custom-spend-limit)。
在明白了授权的风险后,在授权的时候,我们应该遵循的安全实践有:
-
杜绝任何的无限授权
-
授权过程中,应该遵循需要用多少,授权多少,一般精确到小数点后2位就差不多了
-
定期检查自己的账号是否存在无限授权的行为,可以通过 etherscan 的 approval 检查器或者通过 revoke.cash 检查自己的授权情况,及时取消不必要的授权
总结
总体而言,无限授权还是一个较为难以察觉的 风险,由于我们无法信任授权的协议是否在未来不会存在安全问题,所以有限授权才是有效保护我们自己的唯一方式,祝大家都可以睡个好觉 😀
原文始发于微信公众号(蛋蛋的区块链笔记):乱象重生中如何睡个好觉?