Solidity安全图文教程:把抽象漏洞模式画成可记忆的脑图
光读文字描述很难真正记住漏洞模式,把它们画成图就能在脑里形成长期记忆。本文用六张脑图把 Solidity 安全的核心攻击模式可视化呈现,帮助你建立一套结构化的安全直觉。
一、重入攻击脑图
第一张图三个方块:受害合约、攻击合约、ETH 余额。流程箭头:攻击合约 call withdraw → 受害合约转账 → 攻击合约的 receive 再次 call withdraw → 受害合约还没扣账,继续转账。
画完这张图,所有重入变种(同函数、跨函数、跨合约、只读)都能一眼识别。在 Binance Smart Chain 上多起千万美元事件,事后看就是这张图。
二、整数溢出脑图
第二张图用一根数轴表示 uint256 的取值范围。0 到 2^256-1 是一个环,溢出意味着数轴绕回起点。把转账金额、利率计算、份额转换在数轴上画出来,溢出风险一目了然。
0.8 之后默认 checked 算术,但 unchecked block 仍然是常见埋雷点。涉及 USDT 余额变更的代码,每一处算术都要在脑图上核对一次。
三、签名重放脑图
第三张图描绘一份签名在三个维度的传播:同合约(不同 nonce)、跨合约(同链不同地址)、跨链(不同 chainId)。每个维度需要不同的防护手段。
这张图能让你瞬间发现协议是否漏掉某一层防护:少了 nonce 就有同合约重放、少了 domainSeparator 就有跨合约重放、没把 chainId 编码就有跨链重放。
四、价格预言机脑图
第四张图把「现价」「TWAP」「Chainlink 喂价」「闪电贷攻击者」放在同一坐标系。攻击者在 t 时刻借入巨量 ETH,把 DEX 现价拉到极端,然后在同一笔交易内对受害协议发起借贷或清算。
这张图让你立刻看清「直接读取现价」的风险,并理解为什么主流协议都使用 TWAP 或 Chainlink。每次设计新协议时都要画一遍。
五、Proxy 升级脑图
第五张图画 admin、proxy、implementation 三个方块,再用粗箭头表示 delegatecall 流。任何破坏 storage 布局的升级都意味着「错位 storage」,可能导致用户份额错算、admin 权限丢失等灾难。
BTC 跨链桥的多起重大事件都因 proxy 升级 storage collision 引发。把这张图打印贴在升级值班室墙上,能避免不少粗心错误。
六、治理攻击脑图
第六张图描绘提案 → 投票 → 时间锁 → 执行的流水线。攻击者通过闪电贷买入代币 → 立即投票 → 立刻通过 → 立即执行。如果没有时间锁,攻击在一笔交易内就完成了。
防护方法:时间锁、vote-locking、提案最低投票期、紧急委员会否决权。每一道关卡都对应图上一个节点。
结语
这六张图不需要画得多漂亮,重要的是把它们刻进大脑。下次写代码或读代码时,主动调出对应的图比对,你的安全直觉会快速逼近顶尖审计师水平。