← 文章
冷白石墨暖砂
ERC-20ApprovalRisk

无限授权为什么危险

ERC-20 approve 看起来只是少点一次确认,但无限额度会把未来余额也暴露给 spender。

2026-06-09

approve 到底授权了什么

ERC-20 的 approve(spender, amount) 不是转账,而是给 spender 一张额度票。只要 allowance 仍然大于 0,spender 就可以通过 transferFrom 在额度内移动你的代币。

很多 dApp 会默认请求 max uint256,也就是所谓无限授权。这样用户以后不用反复 approve,体验更顺,但风险也被放大了。

危险不只发生在签名当下

无限授权的关键问题是它会持续存在。你今天钱包里只有 10 USDC,明天转进 10,000 USDC,只要授权还在,spender 理论上仍然能动这笔新余额。

如果 spender 合约本身有漏洞、被升级成恶意实现、前端被劫持诱导你交互,或者你授权给了伪装合约,这张额度票都会变成攻击入口。

TxRay 如何判断风险

TxRay 不只读取历史 Approval 事件,还会用 multicall 回链上校验当前 allowance。历史上授权过不代表现在还有效,只有当前额度仍然大于 0 的授权才会展示。

对于超过阈值的额度,TxRay 标记为无限;对于 NFT setApprovalForAll,TxRay 直接视为高风险,因为它给的是整个集合的操作权。

你该怎么处理

不认识的 spender、EOA spender、刚部署不久的合约、长期不用的无限授权,都应该优先撤销。撤销本质上是把 ERC-20 allowance 设为 0,或把 NFT operator 设为 false。

真正要使用某个 dApp 时,再按需重新授权。对大额资产钱包,少一次无限授权,往往比多装一个安全插件更有意义。