W3
安全应急中级预计 40-50 分钟10 个步骤25 次学习

合约交互与授权管理:签名、Approve 与撤销实操

把「连接 DApp 之后发生了什么」讲清楚:Connect Wallet 到底授予了什么权限(只读地址,还是可以动你的钱);钱包弹窗三类操作的本质区别——消息签名(Sign)、交易(Transaction)、代币授权(Approve),以及为什么盲签最危险;personal_sign 与 EIP-712 结构化签名的安全性差异;Approve 授权机制与 allowance 的运作方式、无限授权的真实风险;如何使用 Permit(EIP-2612)离线签名授权并控制额度;用 revoke.cash 与区块浏览器撤销授权的完整实操;滑点与交易期限设置对资金安全的影响;交互前的域名、合约、审计四步自查;最后建立「授权体检」的例行纪律清单。

合约交互与授权管理:签名、Approve 与撤销实操
⚠️
操作前必读

链上资产被盗的主因不是「私钥被破解」,而是用户主动签名或授权。请牢记三条红线:① 看不懂内容的签名一律拒绝;② 不把「签名」当成「登录」,能登录不代表没授权转账;③ 定期用量化工具检查并撤销不用的授权。任何时候,钱包弹窗里的内容才是你真正在授权的东西——页面上的文字说明完全不可信。

01
1. 连接 DApp 与三类弹窗

点击 Connect Wallet 到底给了什么权限

登录记录进度

连接钱包(Connect Wallet)本质是向网站公开你的钱包地址,让网站能读取你的公开信息:

  • 能看到:你的地址、各链余额、持仓代币与 NFT、交易历史(这些本来就是公开数据,任何人都能查)。
  • 不能做不能转走你的资产、不能替你签名、不能动用你的授权。连接本身是只读操作,通常不产生任何交易也不花 Gas。

真正的风险在于连接之后的动作:网站会不断请求你签名或授权,而每一类请求的破坏力完全不同。因此判断标准不是「要不要连接」,而是「连上之后我点了什么」。

实用建议

  1. 用专门的「交互钱包」连接陌生 DApp,不放主要资产(见第 1 章的分层框架)。
  2. 连接时留意弹窗里网站请求的具体权限(部分钱包会显示「查看账户地址」「建议交易」等)。
  3. 用完可以断开连接(钱包设置 → 已连接站点 → 断开),减少误触风险。
点击 Connect Wallet 到底给了什么权限
点击 Connect Wallet 到底给了什么权限|界面示意 · support.metamask.io · 采集于 2026-09-18
💡
小技巧:

「连接」不花钱、不能盗币,因此不要因为害怕而放弃正常使用 DApp;真正要警惕的是接下来的每一个签名弹窗。

02
1. 连接 DApp 与三类弹窗

钱包弹窗三类操作:签名、交易、授权

登录记录进度

钱包弹窗里的请求分三类,破坏力天差地别:

类型 典型表现 是否花 Gas 能否直接转走资产
消息签名(Sign) 「签名以登录」「验证钱包所有权」 ❌ 不花 ❌ 通常不能,但盲签可能授权转账(如 Permit)
交易(Transaction) 显示金额、Gas 费、确认/拒绝 ✅ 要花 ✅ 能(就是真实的转账或合约调用)
代币授权(Approve) 显示「允许 X 使用你的 Y 代币」 ✅ 要花 ⚠️ 授权后对方可随时划走额度内资产

读弹窗的方法

  1. 类型:是「签名」还是「交易」?签名通常不花 Gas,交易一定花 Gas。
  2. 对象:是谁在请求?(弹窗里会显示请求方的域名或合约名)
  3. 内容:交易的 To 地址、金额、调用的函数;授权的代币与额度。
  4. 能不能看懂:看不懂就拒绝。

最重要的一条:永远以钱包弹窗里的内容为准,页面上的文字(「本操作不涉及资产变动」)完全可以是假的。

钱包弹窗三类操作:签名、交易、授权
钱包弹窗三类操作:签名、交易、授权|界面示意 · support.metamask.io · 采集于 2026-09-18
🚫
避坑提醒:

「签名不用花 Gas,所以签了也没事」是危险的误解:Permit 类签名可以让对方在没有你进一步确认的情况下划走代币。

03
2. 签名与授权机制

消息签名与盲签风险

登录记录进度

消息签名(Message Signature)用你的私钥对一段文本签名,用来证明「你掌控这个地址」。常见两种: - personal_sign(普通文本签名):签名内容是可读文本(如「Sign in to example.com」)。

风险相对可控,但若文本内容是一段看不懂的十六进制字符串,就是危险信号——它可能是一段授权指令的编码。 - EIP-712 结构化签名:把要签名的内容以结构化 JSON 呈现(域名、类型、字段一目了然),MetaMask 等钱包会渲染成表格。

这是应该优先选择的形式,因为你能看清自己在签什么。

盲签(Blind Signing) 指你在完全看不懂内容的情况下签名,它的危险性在于:某些签名一旦被提交到链上,效果等同于授权他人动用你的资产(典型是 Permit)。历史上有大量案例是用户在「领取空投」「验证钱包」的页面上盲签了一个 Permit,随后资产被划走。

防御:① 只签你能读懂的内容;② 优先支持 EIP-712 的站点;③ 涉及资产的签名一律用专门的交互钱包。

消息签名与盲签风险
消息签名与盲签风险|界面示意 · support.metamask.io · 采集于 2026-09-18
🚫
避坑提醒:

钱包弹出「签名」但你完全看不懂签名内容时,正确做法是拒绝并关闭页面,而不是「先签了再说」。真正需要你的站点会提供可读的 EIP-712 内容。

04
2. 签名与授权机制

Approve 授权机制:allowance 是怎么运作的

登录记录进度

Approve 是 ERC-20 代币的授权机制,让某个合约(Spender)能在你设定的额度内动用你的代币: 1. 你调用 approve(spender, amount),合约记录 allowance[你][spender] = amount

  1. 之后 Spender 调用 transferFrom(你, 目标, 金额) 时,合约检查 allowance 是否足够,足够就划转并扣减额度。 3. 你随时可以再调一次 approve(spender, 0) 来清零额度。

三个关键认知

  • 授权不锁资金:你的余额还在你的地址上,只是「允许对方划走」。
  • 授权是持续的:一旦授权,在你不撤销前一直有效,不限于当次交易。
  • 授权按「代币 + Spender」分别记录:授权 A 协议不代表授权 B 协议;授权 USDT 不代表授权 USDC。

为什么需要授权:DEX 要替你卖币、借贷协议要替你抵押,它们必须能移动你的代币。这是必要的机制,问题在于额度给多少、给谁。

Approve 授权机制:allowance 是怎么运作的
Approve 授权机制:allowance 是怎么运作的|界面示意 · revoke.cash · 采集于 2026-09-18
💡
小技巧:

把授权理解成「给你的银行卡开了一张副卡」:卡在你名下(余额还在),但对方能刷走额度内的钱,直到你注销这张副卡。

05
2. 签名与授权机制

无限授权的真实风险

登录记录进度

很多 DApp 为了省用户 Gas,默认请求无限授权approve(spender, 2^256-1))。风险链条如下: 1. 你给协议 A 无限授权了 USDT。

  1. 协议 A 的合约后来被发现漏洞(或本身就是恶意的)。 3. 攻击者通过漏洞以协议 A 的身份调用 transferFrom划走你全部的 USDT——不需要你的任何操作,不需要你的签名。

  2. 你甚至可能已经忘了给过这个授权(几十上百个授权很容易遗忘)。

历史上的重大损失事件中,有相当一部分是「用户早年的无限授权被漏洞协议利用」。

降低风险的做法

  • 优先选择支持按次授权(exact amount)的 DApp,而不是默认无限。
  • 若必须无限授权,请用专门的交互钱包操作,别让主钱包给出无限授权。
  • 定期(建议每月)做一次授权体检,撤销不用的授权。
  • 已停止使用的协议、已废弃的合约、来源不明的 Spender,一律优先撤销。
无限授权的真实风险
无限授权的真实风险|界面示意 · ethereum.org · 采集于 2026-09-18
🚫
避坑提醒:

「授权」和「转账」是两种不同的损失方式:转账需要你每次签名;授权只需要你授权过一次,之后对方随时可动。这就是为什么授权体检比转账更值得重视。

06
2. 签名与授权机制

Permit 离线签名授权与额度控制

登录记录进度

Permit(EIP-2612) 是对 Approve 的改进:用一次链下签名代替一笔链上 approve 交易,从而省掉一次 Gas。流程是: 1. 你在页面上点击操作,钱包弹出签名请求(内容是结构化的 EIP-712 数据,包含 spender、value、deadline、nonce)。

  1. 你签名后,DApp 把签名连同交易一起提交上链,合约验证签名有效后直接完成授权 + 划转。

它带来的新风险

  • Permit 的授权不花你的 Gas,因此很多人签得很随意。
  • 若签名里 value 是无限大、deadline 很长,效果等于「链上无限授权」。
  • 恶意站点正是利用「签名不用 Gas,用户警惕性低」这一点行骗。

正确姿势

  1. 签 Permit 前,在钱包弹窗里逐项看:spender 是谁?value 是多少?deadline 到什么时候?
  2. 优先使用支持精确额度短 deadline 的站点。
  3. 支持 Permit 的代币(如 USDC)请注意:一旦签了恶意 Permit,资产会被立即划走,没有任何缓冲。
Permit 离线签名授权与额度控制
Permit 离线签名授权与额度控制|界面示意 · ethereum.org · 采集于 2026-09-18
🚫
避坑提醒:

Permit 签名的破坏力与链上无限授权相同,但因为它「不花 Gas」,用户警惕性往往低得多。请把 Permit 弹窗当作转账确认页一样认真对待。

07
3. 撤销授权与安全自查

撤销授权实操:revoke.cash 与浏览器

登录记录进度

撤销授权有两种方式,推荐用工具批量处理:

方式一:revoke.cash 1. 访问 revoke.cash,核对域名拼写。 2. 连接钱包(只读操作,不需要签名)。 3. 切换到需要检查的网络,页面会列出该地址在该链上的所有授权记录:Spender 合约、代币、额度、授权时间。

  1. 优先处理:标记为 Unlimited(无限) 的、Spender 陌生的、协议已停用的。 5. 点击「Revoke」,每一笔撤销都是一笔链上交易,需要付 Gas

因此 Gas 高峰期可以分批处理。

方式二:区块浏览器 在 Etherscan 等浏览器的地址页找到「Token Approvals」或 ERC-20 Approvals 标签,同样可以查看并撤销。

注意:撤销只是把额度改为 0,不会影响你的余额;撤销后如果还要用该协议,需要重新授权。

撤销授权实操:revoke.cash 与浏览器
撤销授权实操:revoke.cash 与浏览器|界面示意 · support.metamask.io · 采集于 2026-09-18
🚫
避坑提醒:

撤销授权本身也需要连接钱包与支付 Gas,但不需要任何签名或授权。若某个「撤销工具」要求你先签名或 approve,那它本身就是骗局。

打开 revoke.cash
08
3. 撤销授权与安全自查

滑点与交易期限:容易被忽视的损失来源

登录记录进度

在 DEX 兑换与借贷操作中,两个参数直接影响你的资金安全: - 滑点容忍度(Slippage Tolerance):你能接受的实际成交价与预期价的偏差。设得太小 → 价格稍微波动交易就失败(还扣 Gas);设得太大 → 可能被三明治攻击(MEV 抢跑)以极差价格成交。

经验值:主流稳定币对 0.1%0.5%;主流波动币对 0.5%1%;小币/低流动性币可放宽到 5%~10%,但要清楚这意味着可能以很差的价格成交。 - 交易期限(Deadline):超过该时间未被打包则交易失效。

设得过长(如 30 分钟以上)会让攻击者有更长时间利用你的交易;建议 10-20 分钟。

三明治攻击:攻击者在你的交易前后各插一笔,推高买入价或压低卖出价,赚取差价。防御:不要让滑点过大、不要在低流动性池大额交易、尽量使用有 MEV 保护的聚合器或私有交易通道。

滑点与交易期限:容易被忽视的损失来源
滑点与交易期限:容易被忽视的损失来源|界面示意 · support.metamask.io · 采集于 2026-09-18
🚫
避坑提醒:

把滑点调到很高(如 20%+)来「确保成交」,等于主动接受攻击者从你这里拿走近两成资产。宁可交易失败也不要设离谱滑点。

09
3. 撤销授权与安全自查

交互前的四步安全自查

登录记录进度

在与任何陌生 DApp 交互前,花一分钟做四步检查: 1. 域名:URL 是否正确?是否有形近字符、多余连字符、奇怪后缀?从官方渠道(推特认证账号、官方文档)获取链接,而不是从群聊或搜索广告。

  1. 合约:弹窗里与你交互的合约地址,是否与官方公布的地址一致?可以在浏览器上查该合约的创建时间、验证状态与交易量。 3. 行为:你要执行的操作,是否与网站宣称的一致?

例如网站说「领取空投」,弹窗却是「Approve USDT 无限额度」——这就是明确的诈骗信号,立即拒绝。 4. 审计与时间:项目是否有公开审计报告?合约运行多久了?

太新、无审计、交易量异常的项目风险高。

执行纪律:不熟悉的项目只在「交互钱包」里操作;签名/授权前确认资金上限;做完操作后检查一次授权清单。

交互前的四步安全自查
交互前的四步安全自查|界面示意 · support.metamask.io · 采集于 2026-09-18
💡
小技巧:

「网站说的」和「弹窗要做的」不一致,是最可靠的诈骗识别信号之一。养成对比这两个信息的习惯,能挡掉绝大多数骗局。

10
3. 撤销授权与安全自查

建立授权体检的例行纪律

登录记录进度

把安全变成可执行的例行工作,而不是一次性的努力:

周期 动作
每次交互后 确认本次授权额度是否合理;如为无限授权,考虑立即改为精确额度或撤销
每月 打开 revoke.cash,逐链检查授权清单,撤销陌生 Spender、无限额度、已停用协议的授权
每季 复盘钱包分工是否仍然合理:交互层资金是否仍在上限内?储值层是否有过不该有的授权?
重大事件后 某协议被攻击/跑路的消息出来后,第一时间检查并撤销与该协议相关的所有授权

三条永久纪律

  1. 主钱包不做授权:所有高风险交互都在交互钱包完成。
  2. 看不懂就不签:拒绝所有盲签请求,没有例外。
  3. 授权即风险:把「授权」当成「转账」同等级别的操作来对待。

做到这三点,你已经规避了链上资产被盗的绝大部分场景。下一章进入交易所与钱包之间的资产流转。

建立授权体检的例行纪律
建立授权体检的例行纪律|界面示意 · support.metamask.io · 采集于 2026-09-18
💡
小技巧:

把「每月授权体检」加进日历提醒。这件事花不到十分钟,但能消除掉最容易被忽视的长期风险。

来源与时效

教程记录平台 support.metamask.io · 客户端 Web / App · 版本 v1。各平台界面会随版本更新变化,请以官方当前界面为准。

全部步骤已完成

操作完成后建议再核对一次到账金额与手续费,并保留交易哈希作为凭证。

相关教程

代币授权管理与撤销(revoke.cash 实操)
安全应急中级20-30 分钟

代币授权管理与撤销(revoke.cash 实操)

搞懂 DApp 为什么需要 Approve 授权、无限授权(Unlimited)为什么危险,然后打开 revoke.cash 连接钱包,按链查看代币、Spender、授权额度与时间,逐条撤销并支付 Gas,把授权体检变成每月或每季度的固定习惯。

8 个步骤
钱包被盗后的应急处理清单
安全应急中级60 分钟以上

钱包被盗后的应急处理清单

按时间顺序给出一份可照着执行的应急清单:判断是否真的被盗、立刻停止向该地址转入资产、用全新助记词的钱包转移剩余资产(含助记词泄露时 Gas 被秒转的困境与 Flashbots 解法)、撤销授权、排查泄露来源、联系交易所与链上分析机构、准备报案材料并做长期加固。

8 个步骤
硬件钱包与钱包安全加固:冷存储、多签与分层策略
安全应急进阶40-50 分钟

硬件钱包与钱包安全加固:冷存储、多签与分层策略

把钱包安全从「小心别被骗」升级为「即使被骗也伤不到根本」:为什么硬件钱包是资产安全的分水岭——私钥永不接触网络、签名在设备内完成、电脑中木马也拿不到密钥;硬件钱包选型与<strong>只从官方渠道购买</strong>(拒绝二手与第三方改装)的原因;设备初始化时助记词必须在设备屏幕上生成与抄写;与 MetaMask 联动的配置流程与屏幕双重核对纪律;多签钱包(Safe)的原理、阈值配置与团队共管场景;社交恢复与智能钱包如何消除「助记词丢失即终局」;分账户策略的落地方法;家庭与团队场景下的备份分片、共同持有人与继承方案;最后是一份安全加固总清单与年度安全复盘流程。

10 个步骤