W3

智能合约安全实验室

三件工具是连起来用的:在漏洞库里弄懂「为什么这样写会出事」→ 用扫描器在手上的源码里找同类写法 → 按清单把剩下的、工具查不出的部分逐项过一遍。单独用任何一个都会留下盲区,合起来才是一套完整的检查动作。

漏洞条目 10审计检查项 33扫描规则 18其中严重级漏洞 6

这个板块的立场:不给你绿灯

安全工具最常见的问题是「给人虚假的安心感」:扫一遍没报错,用户就以为没问题, 于是把更多钱投进去。所以这里的每个结论都刻意写成线索而不是定性:

  • 扫描器命中一条规则,说的是「出现了这种写法」,而不是「这个项目要跑路」。 正规项目也会命中——有增发权限、可升级、用了内联汇编,全都正常。
  • 扫描器没命中任何规则,说的是「没出现有共识的危险写法」, 而不是「安全」。历史上损失最大的几类漏洞,代码语法完全正常。
  • 审计清单全勾完,说的是「这些该问的问题都问过了」, 而不是「这个合约没问题」。清单本身不是合规文件。

这些工具的价值在于把该看的点一个不漏地铺开,而不是替你做判断。

相关:要查某个已知地址的验证状态与持仓分布,用合约体检;只有字节码想确认链上跑的是不是同一份,去字节码比对;想亲手把 EIP-712 的字段删掉看签名怎么失效,去EIP-712 验签台;系统学一遍合约开发与部署流程,从智能合约学习路径开始。

动手试一试

下面 1 个练习在浏览器里真跑:输入是常量与参数,不需要连钱包、不发交易、不读你的账户。数字自己改,结论自己验。

全部练习与实验 →
安全 · 这一段要让你看懂:授权(approve)是链上最常见的风险来源:它不转账,只是把动用你资产的权限交给别人。学会看 calldata,你就能在签名前判断「这一笔会打开多大的权限」。 先看这一章 →

试一试 · 手动解码一段 approve,看清你在授权什么

可直接改代码 · 在浏览器沙箱里真跑
playground.jsJavaScript
运行环境:iframe 沙箱(无 cookie 权限)。只支持纯 JS 片段,不支持 import / require;需要模块请用下方的完整示例复制到项目里。
检查点(跑完后逐条核对)
  • 识别出选择器 0x095ea7b3 对应 approve
  • 额度为全 f 时判定为「无限授权」
  • 结论:授权不是转账,但风险更大 —— 授权前先看额度