刚接触DeFi那阵子,我犯过一个至今想起来还后怕的错:半夜看到一个项目号称“存USDT每天返1%”,脑子一热,连上钱包,点了“授权”。界面卡了几秒钟,弹出一串乱码般的权限请求,我当时根本看不懂,直接划到底部点了确认。第二天醒来,钱包里的USDT全没了,链上记录显示一个陌生合约把钱划得干干净净。后来查了半天才明白:我给了它“无限额授权”,那个合约不是理财协议,是一张空白支票。
这是个老生常谈但永远有人在上面摔跟头的话题。连接DApp授权,很多人的认知只停留在“不要随便点确认”,但真正致命的坑比这深得多。下面把几个最容易中招的地方一层层剥开。
你连的是“连接”,还是“授权”?
大多数人把“连接钱包”和“授权代币”当成一回事,这本身就是最大的风险源头。
连接钱包:只是把你的地址暴露给DApp,让DApp可以读取余额、交易记录,用来展示界面。就像你把银行卡号告诉商家,他们只能看到你的账户信息,不能直接从你卡里划钱。
授权代币(Approve):是你签名允许某个合约动用你钱包里的某种代币,通常有个额度,比如1000 USDC或者“无限”。这等于你签了一张允许对方从你账户转账的授权书,至于它什么时候转、转多少,取决于合约代码和你设的额度上限。
一张表格看清楚:

| 操作类型 | 钱包弹窗通常显示 | 风险级别 | 后果 |
|---|---|---|---|
| 连接钱包 | “某网站请求连接你的钱包” | 低 | 暴露地址,可能被用于网络钓鱼分析 |
| 签名消息 | “签名此消息以登录/验证” | 中 | 若签名了恶意消息,可能被伪装身份或授权钓鱼 |
| 授权代币(Approve) | “允许某合约使用你的USDT?” | 高 | 合约可按额度划走你的代币 |
| 授权+转账(TransferFrom) | 有时和授权一起被触发 | 极高 | 直接转移资产,一旦执行无法回滚 |
| 无限额授权(Unlimited) | 额度显示为“无限”或一串极大的数字 | 最高 | 不仅当前余额,以后转入的所有同种代币都能被划走 |
连接之后,DApp如果想要动你的币,就必须再弹出一个授权窗口。如果没有这个窗口,它什么都转不走。但很多诈骗网站会伪装按钮,你以为是在“连接”,实际点击后触发的是一笔授权交易,或者弹出一个和授权界面几乎一样的签名框。这个环节,没有撤销键。
无限额授权:链上最贵的“同意”
最经典也最惨烈的风险就是无限额授权。大部分DeFi协议为了用户体验,会默认申请无限额授权,这样你下次交易时不用再付Gas重新授权。但如果你在一个恶意合约上签了无限额授权,意味着这个合约可以随时、无限次地从你钱包划走这种币,而且不止是当下的余额——你以后充进去的、其他协议赚回来的,只要回到这个地址,它都能转走。
有个真实链上案例:一个用户在一处钓鱼DApp上授权了USDC无限额,当时钱包里只有几十U,他没在意。半年后他把一大笔USDC存回这个地址,不到十分钟就被清空,攻击者的脚本一直监控着这个授权。
怎么查自己有没有“空白支票”还飘在外面? 去以太坊浏览器或安全工具上查自己的地址的Token Approvals列表。Etherscan、BscScan都有,直接搜你的地址,找到“代币授权”页。或者用Revoke.cash,连上钱包就能看所有已授权列表,能直接撤销。定期查,和定期体检一样必要。
签名骗局:根本不是授权,却能让你归零
有一种更隐蔽的形式不需要Approve,只是一个简单的签名。比如你看到一个“免费领取空投”的页面,连接钱包后它弹出一个签名请求,上面写着“签名以验证地址”。你签了,什么事都没发生,但其实你签的那段消息,可能是一笔数据打包好的授权,或者让一个恶意合约把你的币转移走的指令。
这是利用了一个高级特性:EIP-2612的Permit,它允许你只通过一次链下签名就完成授权,连Gas都不用付。这本来是为了省Gas的设计,但被钓鱼网站玩成了核武器。你签名的瞬间,就等于给了对方无限额授权,而整个过程不需要链上确认,等你发现余额变动时,已经来不及了。
防范方法:凡是让你签名的窗口,别看都不看就划到底部。MetaMask等钱包现在会对这种签名给出“高危”警告,如果看到“这是一个代币授权请求”或者红色的风险提示,立刻关掉。哪怕没有警告,也要看签名内容,如果是你不认识的哈希,不签。
授权后的持续风险:你以为完事就完事了?
很多用户关注的是“授权那一刻”的风险,但授权之后还有一连串的事:
- 合约升级:有些代理合约可以更改逻辑。你今天授权了一个正常的Swap合约,改天项目方升级了合约,它就能变成转走你币的恶意逻辑。这种风险尤其存在于那些匿名团队、无时间锁的合约里。
- 被忽略的旧授权:两年前交互过的某个已死协议,你的授权还挂着。黑客如果找到那个协议的合约漏洞,可以直接利用你未撤销的授权从你钱包里偷钱。这就是为什么安全专家总让你定期撤销授权。
- 授权记录暴露隐私:链上所有人都能看到你授权过哪些协议,结合其他数据,可以画出你的行为画像,成为精准钓鱼的目标。
真出事了,还有黄金几分钟吗?
如果刚点了确认发现不对劲,资产还没被转走,你还有时间窗口。最快的操作:
- 立刻撤销授权:用Revoke.cash或钱包自带的授权管理,发起一笔Revoke交易,把额度改为0。这需要付Gas,但能保住剩下的币。如果用的是智能账户或某些支持授权管理的钱包(如OKX Wallet),直接在App里操作更快。
- 转移资产:如果攻击者的脚本在监控,可能你撤销的同时它也在尝试转走。把还没被动的其他币转到一个新地址,速度要快。
- 切断连接:在钱包里删除与那个DApp的连接,防止再次误操作。
如果币已经被转走了,那只能追踪地址,联系安全公司或警方,但追回概率极低。链上转账无法回滚,授权就是对代码的绝对信任。
给自己建几道防火墙
养成限额授权习惯:每次授权时,如果钱包支持修改额度,填一个比当前需求稍微多一点的数字,别点“无限”。虽然多付几次授权Gas,但比归零强。
使用辅助工具检查:安装钱包安全插件,如Blockfence、Pocket Universe等,它们能在你交互前给出风险提示。
双钱包策略:准备两个钱包。一个作为“金库”,从不与任何DApp交互,只用于存储和向交易所转账;另一个作为“零花钱钱包”,专门用来和DApp交互,即使出事,损失也有限。两者之间转账时才交互。
定期大扫除:每个月底花五分钟,连上Revoke.cash把所有链的授权看一遍,不认识的或不再用的直接撤。这个习惯保持一年,能避开绝大多数残留风险。
DApp的世界里,每点一次“确认”都是在给出信任。信任代码、信任项目方、信任自己的判断。但链上不信眼泪,只信规则。看清楚再点,实在看不明白的,不碰就是赢。
免责声明:
本文仅为链上安全知识分享,不构成任何投资建议或安全承诺。链上操作不可逆,请务必自行核实合约地址与权限请求,任何因参考本文内容导致的操作失误或资产损失,作者与平台不承担任何责任。

发表回复