Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 910

重入攻击

重入攻击 是什么?

重入攻击智能合约漏洞,外部调用使攻击者在状态更新前再次进入原函数,通过递归循环不断转出资金。


当合约在更新自身账本之前向外部地址发送 ETH 或代币(如使用 call、transfer 或 ERC-777 钩子)时,就可能发生重入。攻击者控制该外部地址,并在回调中再次调用原始的提取函数,如此循环直至合约被掏空。常见变体包括单函数、跨函数、跨合约以及只读重入。缓解方法包括 checks-effects-interactions 模式、OpenZeppelin 的 ReentrancyGuard、采用 pull-payment 设计,以及避免对不受信任的合约使用低级调用。2016 年针对 The DAO 的攻击是经典案例,并直接导致 Ethereum 与 Ethereum Classic 的硬分叉。

示例

  1. 01

    2016 年 6 月 The DAO 被通过递归调用 splitDAO 抽走约 360 万枚 ETH。

  2. 02

    2021 年 Cream Finance 因 ERC-777 回调引发跨函数重入而遭遇紧急事件。

常见问题

重入攻击 是什么?

智能合约漏洞,外部调用使攻击者在状态更新前再次进入原函数,通过递归循环不断转出资金。 它属于网络安全的 Web3 与区块链 分类。

重入攻击 是什么意思?

智能合约漏洞,外部调用使攻击者在状态更新前再次进入原函数,通过递归循环不断转出资金。

重入攻击 是如何工作的?

当合约在更新自身账本之前向外部地址发送 ETH 或代币(如使用 call、transfer 或 ERC-777 钩子)时,就可能发生重入。攻击者控制该外部地址,并在回调中再次调用原始的提取函数,如此循环直至合约被掏空。常见变体包括单函数、跨函数、跨合约以及只读重入。缓解方法包括 checks-effects-interactions 模式、OpenZeppelin 的 ReentrancyGuard、采用 pull-payment 设计,以及避免对不受信任的合约使用低级调用。2016 年针对 The DAO 的攻击是经典案例,并直接导致 Ethereum 与 Ethereum Classic 的硬分叉。

如何防御 重入攻击?

针对 重入攻击 的防御通常结合技术控制与运营实践,详见上方完整定义。

重入攻击 还有哪些其他名称?

常见的别称包括: 递归调用攻击。

相关术语