加载中...

重入攻击(Reentrancy Attack)是智能合约最经典的漏洞利用方式:合约在向外部地址转账等外部调用时,控制权会交给对方;若合约在调用前未更新自身状态,恶意合约可在回调中再次进入原函数,反复提款直至资金被抽干。
以有漏洞的取款函数为例:合约先按记录余额给调用者转账,再把余额清零。攻击者部署一个在收款回调(如 fallback 函数)中再次调用取款的合约,由于余额尚未清零,检查始终通过,取款被递归执行多次。2016 年 The DAO 事件即因此损失了约 360 万枚 ETH,直接导致以太坊硬分叉。
业界标准做法包括:遵循"检查—生效—交互"(Checks-Effects-Interactions)模式,先更新状态再做外部调用;使用重入锁(如 OpenZeppelin 的 ReentrancyGuard 修饰器);谨慎处理跨函数、跨合约的只读重入等变体。
重入攻击是智能合约安全审计的必查项,也是理解 EVM 调用模型副作用的最佳教学案例。

登录 后参与讨论
暂无讨论,来发表第一条评论吧