EVM 漏洞案例是合约开发者最值得研究的素材。每一次重大安全事件背后,往往不是单一 bug,而是一整套设计上的疏漏。理解经典案例的根因与防御要点,比记忆漏洞名称更有价值。本文复盘几类典型事件,并给出相应的防御建议。
重入漏洞:经典中的经典
最著名的重入事件让一个早期 DAO 损失惨重,问题在于先转账后修改状态的代码顺序。重入攻击的本质是外部合约在第一次调用返回之前再次进入相同函数,借助未更新的状态实施套利。防御的关键是 checks-effects-interactions 模式与 ReentrancyGuard。延伸阅读 EVM安全审计。
整数溢出:旧版 Solidity 的隐藏陷阱
在 Solidity 0.8 之前,整数运算默认不检查溢出。许多代币合约因此被攻击者通过特定参数让余额溢出,导致大量代币凭空增发。即使在 0.8 之后,开发者在 unchecked block 中仍要谨慎处理。可参考 EVM最佳实践 中的数值处理章节。
delegatecall 滥用与代理合约劫持
delegatecall 在代理合约中是必需操作,但若实现合约的初始化逻辑暴露给任何人调用,攻击者就能借机劫持代理。多个真实项目因此失去对代理合约的控制权。防御要点是把 initialize 函数严格限制为一次性调用,并使用 OpenZeppelin 等经过审计的代理库。详见 EVM调试方法。
签名重放与跨链签名混用
签名重放发生在两种情况:同一签名在同一链上被多次使用,或跨链签名被错误地在其他链上重用。前者要求合约维护 nonce,后者要求签名结构中包含 chainId。复盘多起 NFT 与桥相关事件,根因都集中于此。延伸阅读 EVM漏洞案例。
价格预言机操纵
部分 DeFi 合约直接读取流动性池作为价格来源,攻击者通过闪电贷拉高或砸低池子价格,然后在同一交易中套利。防御要点是使用时间加权均价或多预言机组合,避免依赖单一即时价格。可结合 EVM完整教程 中的 DeFi 章节研究。
与合规交易所的接口陷阱
部分代币合约在与 Binance 等合规交易所对接时,因 transferFrom 实现不符合 ERC-20 规范而出现资金异常。建议严格按标准实现接口,并在测试网完成全链路验证。
漏洞案例不仅是事故记录,更是设计教科书。把它们沉淀为团队的安全清单,是减少未来事故概率的最有效方式。