LELexEdge词汇锋面
Web3专业术语

Reentrancy

重入攻击 · 智能合约最经典的致命漏洞

合约安全智能合约
REEN
定义
ReentrancyWeb3领域的专业术语重入攻击利用合约在转账时将控制权交给外部合约的特性,恶意合约在回调中反复调用提款函数,在余额更新前多次提取资金。

最后更新:2026-03-18

什么是Reentrancy?

重入攻击利用合约在转账时将控制权交给外部合约的特性,恶意合约在回调中反复调用提款函数,在余额更新前多次提取资金。The DAO 事件就是重入攻击。

  • 智能合约最经典的安全漏洞
  • 利用外部调用的回调机制
  • The DAO 事件的根本原因

Reentrancy详解

重入攻击的原理:合约 A 向合约 B 转账时,B 的 receive/fallback 函数被触发,B 在回调中再次调用 A 的提款函数,此时 A 的余额尚未更新,导致重复提款。防御方式:Checks-Effects-Interactions 模式(先更新状态再转账)、ReentrancyGuard 互斥锁、使用 transfer 限制 gas。2016 年 The DAO 因重入漏洞损失 6000 万美元,直接导致以太坊硬分叉。

Reentrancy的应用场景

正式定义

智能合约因外部调用重入导致状态不一致的安全漏洞

应用场景

  • 智能合约的安全审计
  • DeFi 协议的漏洞检测
  • Solidity 开发的安全最佳实践

常见误区

  • 重入不只发生在 ETH 转账,ERC-20 的回调也可能触发
  • Checks-Effects-Interactions 模式是最基本的防御
  • 现代 Solidity 版本和工具已能检测大部分重入风险

实际案例

📌 The DAO 事件

2016 年 The DAO 因重入漏洞被攻击者提取了 360 万 ETH(当时约 6000 万美元),以太坊社区为此进行了硬分叉,分裂出 ETH 和 ETC。

Reentrancy的参考来源

关于Reentrancy的常见问题

重入攻击是怎么发生的
合约在转账时调用外部合约,外部合约在转账完成前再次调用原合约的提款函数,反复提取资金。
怎么防止重入攻击
使用 Checks-Effects-Interactions 模式、OpenZeppelin 的 ReentrancyGuard、或先更新状态再转账。