你可能会想:「我只是在 Uniswap 上点了一下 Approve,能有什么问题?」
问题大了。2025 年,仅 Approve 钓鱼一种手法就造成了 超过 8 亿美元的损失——是所有链上骗局中损失金额最高的单一类型,远超私钥泄露。
你在链上每次点击「签名」或「确认」,都是在授权别人操作你的资产。 不理解你签的是什么,就可能在一瞬间失去钱包里所有的钱。
💡 先确保你的钱包安全: 如果你还没创建或配置好钱包,请先阅读 MetaMask 钱包创建与使用完全指南。本篇文章假设你已在链上操作,重点讲安全交互。
一、核心概念:链上授权到底是什么?
在开始拆解骗局之前,你必须理解一个最基础的问题:
你在链上做的任何操作,本质上都是一笔交易(Transaction)。 每一笔交易都需要你用私钥签名——签名意味着「我同意」。
但问题在于,很多 DApp 会让你签名的内容,远比你想象的要「权限大」。
三种最常见的授权类型
| 授权类型 | 作用 | 风险等级 |
|---|---|---|
| 代币授权(Approve) | 允许某个合约花你的指定代币 | 🔴 高 |
| SetApprovalForAll | 允许某个合约操作你的所有 NFT | 🔴 极高 |
| Permit 签名(离线授权) | 用签名代替交易完成授权 | 🟠 中高 |
每一类都有对应的攻击手法,我们逐一拆解。
二、代币授权(Approve)钓鱼——最流行的链上攻击
原理
当你第一次在 Uniswap 上交易某个代币时,MetaMask 会弹出一个 Approve 确认窗口,让你「授权」Uniswap 合约动你的 USDT。
这是正常操作,但你授权了多少才是关键:
- 无限授权(Unlimited Approval): 大多数 DApp 默认请求「无上限」授权。比如你只是买 100 USDT 的币,但授权给了合约无限动用你钱包里所有 USDT 的权限。
- 有限授权: 指定一个具体额度,比如只授权 100 USDT。
攻击手法
骗子会诱导你向一个「假的智能合约」授权。这个合约本身不做正经交易,它的唯一功能就是 调用 transferFrom 把你的币转走。
常见场景:
- 假 DApp 网站: 一个和 Uniswap 长得一模一样的网站,你连接钱包后叫你 Approve,一旦确认,钱包里的 USDT 几秒内被转空。
- 假空投领取: 你收到一个「免费空投」链接,点进去叫你 Approve 才能领——实际上 Approve 的对象是一个恶意合约。
- 假 NFT Mint: 热门 NFT 项目铸造时,骗子做钓鱼网站诱导 Approve。
真实案例
2024 年,一个伪造的 ZKasino 交互网站 诱导数百名用户 Approve 了恶意合约。用户在几周内不知道被授权了什么——直到某天钱包里的 Matic 和 USDT 被全部转走,总损失超过 3000 万美元。
如何防范
- ✅ 授权时检查限额: 在 MetaMask 确认窗口中选择「自定义额度」,只授权本次交易需要的数量
- ✅ 用完后 Revoke: 使用 Revoke.cash 或 Rabby 内置的安全检查撤销不必要的授权
- ✅ 用 Rabby 钱包: Rabby 会自动检测 Approve 风险并警告
- ❌ 不要随意 Approve 不明合约地址
- ❌ 不要使用 Google 搜索到的 DApp 链接——从官方 Twitter/Discord 或 CoinGecko 获取
🛡️ 实操工具推荐:
- Revoke.cash——多链授权管理,一键撤销
- Etherscan 代币批准检查——查看某地址的授权列表
- Rabby 钱包安全弹窗——授权时自动分析风险
三、SetApprovalForAll——你的 NFT 可能一夜清零
原理
SetApprovalForAll 是 ERC-721(NFT)标准中的授权函数。当你授权一个合约「操作你所有的 NFT」,意味着这个合约可以转移你钱包里任何一个 NFT。
为什么更危险
和 ERC-20 的 Approve 不同,SetApprovalForAll 没有「数量」选项。要么不授权,要么就是全部授权。一旦你点了确认:
- 骗子可以转走你所有的 BAYC、Pudgy Penguins、Azuki——一个不留
- 你甚至可能几个月后才发现,因为 NFT 不像代币那样频繁查看余额
攻击手法
- 假交易市场: 骗子创建一个假的 OpenSea/Blur 网站,引导你 SetApprovalForAll
- 假空投/白名单: 「免费 Mint」页面要求授权后才能操作
- 社交工程: 冒充项目客服要求「验证钱包」
如何防范
- ✅ 用 Rabby 钱包: 它会明确标注「该合约可操作你所有 NFT」
- ✅ 定期检查授权: Revoke.cash 支持查看和撤销 NFT 授权
- ✅ 考虑用硬件钱包/冷钱包存储高价值 NFT——日常交互用小额热钱包
- ✅ 常用合约可以保留,但不明合约授权后立即撤销
- ❌ 不要在不明链接中 SetApprovalForAll
四、Permit 钓鱼——无 Gas 的隐蔽攻击
原理
EIP-2612 引入的 Permit 功能允许用户 用签名代替交易 完成授权。好处是:你不需要花 Gas 费就能授权——但坏处是:攻击者可以诱导你签名一条消息,然后拿着签名自己去链上提交交易。
为什么特别危险
传统 Approve 至少会触发一笔链上交易,你在 MetaMask 上能看到 Gas 费。但 Permit 签名不产生链上交易——受害者可能只是「签了个名」,根本不知道自己授权了什么。
等到攻击者拿着签名上链执行时,你的币已经在路上了。
攻击手法
- 骗子发给你一个链接,页面显示「请签名验证你是人类」
- 你以为只是普通的签名(比如 Sign-in with Ethereum)
- 但实际上你签署的是一条 Permit 授权消息
- 骗子拿到签名后,在链上调用
permit+transferFrom,一次交易完成两件事 - 你的钱包里 U 没了,但你的 MetaMask 活动记录里只有一条签名记录,不是交易记录
如何防范
- ✅ 区分「签名」和「交易」: MetaMask 中签名窗口(白色主题)不花 Gas,交易窗口(带 ETH 图标)花 Gas——两者都可能危险
- ✅ 不要随意在不明网站签名
- ✅ 使用 Rabby 或安全浏览器扩展 解析签名内容
- ✅ 检查签名消息内容: 看到
permit、EIP-2612、deadline等关键词要警惕 - ❌ 不要相信「只需签名,不需 Gas」的交互
五、IncreaseAllowance / DecreaseAllowance 变种
原理
这是 Approve 的变种攻击。有些代币(如 USDT)实现了 increaseAllowance 和 decreaseAllowance 函数。攻击者可以先让你 Approve 一个小额度,然后诱导你调用 increaseAllowance 把额度加到无限大——而不是重新发起一个新的 Approve。
为什么能绕过安全检查
部分钱包和安全工具只检查 Approve 调用的参数,但忽略 IncreaseAllowance 的累计效果。所以:
- 第一次:Approve 1 USDT(看起来安全)
- 第二次:IncreaseAllowance 到无限(看起来只是「增加」了额度)
- 实际结果:你的所有 USDT 暴露了
如何防范
- ✅ 了解漏洞原理,关注反直觉的授权函数
- ✅ 使用 Rabby 钱包(它会识别并警告 IncreaseAllowance 行为)
- ✅ 定期用 Revoke.cash 查看你的真实授权状态
- ✅ 对大额资产使用单独钱包,日常交互钱包只放小额资金
六、Permit2——Uniswap 的新标准与新的攻击面
Uniswap 推出了 Permit2 作为新的授权标准,允许用户在多个 Uniswap 产品之间共享一次授权。虽然设计上是安全的,但它也引入了新的攻击面:
- 如果你在某个恶意 DApp 中授权了 Permit2,攻击者可以一次提取你在所有支持 Permit2 的 DApp 中的代币
- Permit2 授权后不显示传统的 Approve 交易,容易被忽视
防范: 和所有授权一样——只在你信任的 DApp 中操作,定期检查授权列表。
七、安全交互 Checklist(可收藏)
每次在链上进行交互前,对照这个清单问自己:
交互前
- 这个 DApp 的网址是对的吗? 不要用 Google 搜索结果,从官方 Twitter/Discord 获取
- 合约地址验证过吗? 在 CoinGecko 或项目官方文档中核对
- 我用的钱包有安全检测吗?(推荐 Rabby + MetaMask 组合)
授权时
- 这是代币授权(Approve)还是 SetApprovalForAll? 后者风险高得多
- 授权额度合理吗? 用「自定义额度」而不是「无限授权」
- 这个合约地址在 Revoke.cash 上有没有被标记为恶意?
签名时
- 这是交易还是签名? 没有 Gas 费的交互相对于「我把签名给你,你自己拿去执行」
- 签名内容里有没有
permit、deadline、nonce等关键词? 警惕!
授权后
- 立即去 Revoke.cash 审查授权
- 不需要的授权立即撤销
- 大额资产放在单独的冷钱包里,日常交互用小钱包
八、推荐安全工具套装
| 工具 | 用途 | 链接 |
|---|---|---|
| Rabby 钱包 | 安全检测最强的钱包,自动分析授权风险 | Rabby.io |
| Revoke.cash | 多链授权管理与撤销 | Revoke.cash |
| Etherscan 代笔批准检查器 | 查看单地址的 ERC-20 授权 | 点击前往 |
| DeBank | 钱包安全评分 + 授权概览 | DeBank |
| 钱包分离策略 | 大额冷存 + 小额热交互 | 详见 冷钱包 vs 热钱包对比 |
总结
链上安全的核心只有一句话:永远不要签你不理解的内容。
- Approve 会授权合约动你的钱——控制额度,用完撤销
- SetApprovalForAll 会让合约动你所有的 NFT——非必要不使用
- Permit 签名不需要 Gas,但同样危险——注意签的是什么
- IncreaseAllowance 变种会绕过部分安全检查——定期检查授权才是王道
- 使用安全钱包(Rabby)和安全工具(Revoke.cash)能拦截 90% 的攻击
记住:在链上,你的安全意识才是最好的防火墙。
📌 更多学习资源
想了解更多链上操作和安全知识?欢迎访问 CoinVado - 新手进入链上资产世界的第一站,这里有更系统的教程、视频和最新资讯,帮助你在 Crypto 世界少走弯路。
⚠️ 风险提示: 本文内容仅供学习参考,不构成任何投资建议。加密货币及链上交互存在较高风险,请只投入你能够承受损失的金额。在进行任何链上操作前,务必理解你所签署的内容。