市值: $2.607T 0.90%
成交额(24h): $88.5549B -12.29%
恐惧与贪婪指数:

64 - 贪婪

  • 市值: $2.607T 0.90%
  • 成交额(24h): $88.5549B -12.29%
  • 恐惧与贪婪指数:
  • 市值: $2.607T 0.90%
加密货币
话题
百科
资讯
加密话题
视频
热门加密百科

选择语种

选择语种

选择货币

加密货币
话题
百科
资讯
加密话题
视频

什么是智能合约中的重入攻击?

Reentrancy attacks exploit Ethereum’s external call mechanism, allowing malicious contracts to recursively drain funds before state updates—famously enabling The DAO hack.

2025/12/24 02:20

了解重入攻击

1. 当恶意合约在初始执行完成之前重复回调另一个合约的易受攻击的函数时,就会发生重入攻击。

2. 此漏洞利用以太坊智能合约中的外部调用机制,在状态更改最终确定之前将控制权转移到外部地址。

3. 攻击者部署一个包含回退或接收函数的合约,该函数会触发目标提款或转账逻辑的递归调用。

4. 由于以太坊以单线程、同步的方式执行调用,并且默认情况下不强制执行原子状态更新,因此在回调窗口期间余额或标志可能保持不变。

5. 因此,在没有适当检查的情况下,资金可能会从同一余额中多次被耗尽,从而违反了系统预期的经济不变性。

著名的历史例子:DAO 黑客事件

1. 2016 年 6 月,名为 The DAO 的去中心化自治组织被盗走约360 万枚 ETH ,当时价值超过 5000 万美元。

2. 该漏洞存在于分割函数中,该函数允许用户在提案通过后撤回其份额,但在转移资金更新了贡献者的余额。

3. 攻击者部署了一个带有后备函数的合约,该函数在余额更新发生之前递归调用 split 函数。

4. 每次递归调用都会读取原始余额值,从而可以从相同的分配金额中重复提取。

5. 该事件引发了以太坊区块链的硬分叉,导致以太坊和以太坊经典成为两条独立的链。

实现可重入的技术条件

1. 对不受信任地址的外部调用必须先于关键状态修改,例如余额更新或访问标志切换。

2. 合约必须依赖反映所有权或权利的可变存储变量,而不强制执行重入防护。

3. 缺乏互斥模式(例如使用锁定的布尔值或重入修饰符)会使嵌套调用上下文中的入口点不受保护。

4. 由于缺乏gas补贴限制和自动恢复行为,使用call()等低级调用而不是transfer()send()等更安全的替代方法会增加风险。

5. 从过时或未经审核的库继承的合约可能会无意中暴露具有继承的可重入表面的函数。

今天部署的缓解策略

1. 检查-效果-交互模式要求验证条件、更新内部状态,然后才执行外部调用。

2. 重入防护(例如 OpenZeppelin 的ReentrancyGuard )使用锁定的布尔值来防止活动执行期间函数重入。

3. 使用transfer()send()代替原始call()会强制执行2300-gas 限制,使得后备函数无法执行复杂的逻辑,包括进一步的可重入调用。

4. Slither 和 MythX 等静态分析工具可检测开发和 CI 管道期间潜在的重入向量。

5. Certora 和 KEVM 等正式验证框架在任意调用序列(包括嵌套外部调用)下验证契约不变量。

常见问题解答

Q1.重入攻击会发生在以太坊以外的区块链上吗? A1。是的。如果合约复制相同的有缺陷的交互模式,任何与 EVM 兼容的链(包括 BNB Chain、Polygon 和 Arbitrum)都同样容易受到影响。具有类似外部调用语义的非 EVM 链,例如 Solana 在某些条件下的跨程序调用,也面临类似的风险。

Q2。使用 require() 语句足以防止重入吗? A2。不需要。Require 语句验证先决条件,但不会阻止重新输入。它们在状态改变之前运行,并且一旦发生外部调用就无法限制后续回调。

Q3。基于代理的可升级合约是否会引入额外的可重入表面? A3。是的。如果实现合约缺乏重入保护,并且代理在不拦截或验证调用深度的情况下转发调用,则可升级模式可以继承或放大现有漏洞。

Q4。即使没有恶意合约,闪电贷也能触发重入吗? A4。是的。闪电贷攻击通常将价格预言机操纵与重入结合起来,以耗尽流动性池或贷款协议,如针对 dYdX、Harvest Finance 和 BurgerSwap 的攻击——所有这些都依赖于关键路径内不受保护的外部调用。

免责声明:info@kdj.com

所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!

如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。

相关百科

什么是 DAI?它与 USDT 有何不同?

什么是 DAI?它与 USDT 有何不同?

2026-09-08 17:00:22

市场波动模式1. 自2021年以来,Bitcoin超过68%的交易日在24小时窗口内价格波动超过15%。 2. 在流动性较低的时期,尤其是在 02:00 至 06:00 UTC 期间,以太坊表现出比 Bitcoin 更高的日内波动性。 3. 稳定币脱钩事件(例如 2023 年 3 月的 USDC 事...

为什么稳定币会失去 1 美元的挂钩?

为什么稳定币会失去 1 美元的挂钩?

2026-09-08 02:00:03

储备构成和透明度差距1. 许多稳定币声称完全由现金或短期美国国债支持,但储备披露往往缺乏实时验证机制。 2. 第三方证明可能仅每季度进行一次,从而留下较长的窗口,使不匹配的资产负债结构仍未被发现。 3. 一些发行人持有的商业票据或逆回购协议存在未反映在公共资产负债表中的交易对手风险。 4. 链下银行...

什么是加密货币中的自我托管以及为什么它很重要?

什么是加密货币中的自我托管以及为什么它很重要?

2026-09-10 04:19:32

定义和核心机制1. 自我保管是指个人保留对其私钥的完全控制权,而不将该权力委托给任何第三方服务的做法。 2. 自我托管钱包的服务器上不持有资产;相反,它提供了一个使用本地存储的加密密钥与区块链网络交互的接口。 3. 用户的设备(无论是智能手机、台式机还是硬件模块)托管种子短语和私钥,并且在正常操作期...

托管钱包与非托管钱包:有什么区别?

托管钱包与非托管钱包:有什么区别?

2026-09-17 03:19:46

托管钱包定义1. 托管钱包是一种由第三方服务提供商持有和管理用户私钥的数字资产存储解决方案。 2. 用户通过电子邮件、密码和双因素身份验证等登录凭据访问资金,而不是直接加密控制。 3. 简化帐户恢复——忘记密码或失去设备访问权限的用户可以通过平台管理的身份验证协议重新获得访问权限。 4. 这些钱包通...

什么是多重签名钱包以及它何时有用?

什么是多重签名钱包以及它何时有用?

2026-09-12 14:20:01

定义及核心架构1. 多重签名钱包是一种加密结构,需要多个私钥来授权单个区块链交易。 2. 它在M-of-N 签名方案下运行,其中M表示所需的最小签名数量, N表示授权签名者的总数。 3. 每个签名者生成独立的密钥对;他们的公钥被共同嵌入到通过确定性散列导出的唯一链上地址中。 4. 没有任何一个参与者...

Bitcoin 与闪电网络:有什么区别?

Bitcoin 与闪电网络:有什么区别?

2026-09-13 15:40:16

核心架构及交易模型1. Bitcoin 在单层、无需许可的区块链上运行,其中每笔交易都经过加密验证,在数千个全节点上传播,并大约每十分钟永久记录在连续块中。 2. 闪电网络作为直接构建在 Bitcoin 的 UTXO 模型之上的点对点覆盖网络,依赖于由时间锁定、可撤销的承诺交易强制执行的双向支付通道...

什么是 DAI?它与 USDT 有何不同?

什么是 DAI?它与 USDT 有何不同?

2026-09-08 17:00:22

市场波动模式1. 自2021年以来,Bitcoin超过68%的交易日在24小时窗口内价格波动超过15%。 2. 在流动性较低的时期,尤其是在 02:00 至 06:00 UTC 期间,以太坊表现出比 Bitcoin 更高的日内波动性。 3. 稳定币脱钩事件(例如 2023 年 3 月的 USDC 事...

为什么稳定币会失去 1 美元的挂钩?

为什么稳定币会失去 1 美元的挂钩?

2026-09-08 02:00:03

储备构成和透明度差距1. 许多稳定币声称完全由现金或短期美国国债支持,但储备披露往往缺乏实时验证机制。 2. 第三方证明可能仅每季度进行一次,从而留下较长的窗口,使不匹配的资产负债结构仍未被发现。 3. 一些发行人持有的商业票据或逆回购协议存在未反映在公共资产负债表中的交易对手风险。 4. 链下银行...

什么是加密货币中的自我托管以及为什么它很重要?

什么是加密货币中的自我托管以及为什么它很重要?

2026-09-10 04:19:32

定义和核心机制1. 自我保管是指个人保留对其私钥的完全控制权,而不将该权力委托给任何第三方服务的做法。 2. 自我托管钱包的服务器上不持有资产;相反,它提供了一个使用本地存储的加密密钥与区块链网络交互的接口。 3. 用户的设备(无论是智能手机、台式机还是硬件模块)托管种子短语和私钥,并且在正常操作期...

托管钱包与非托管钱包:有什么区别?

托管钱包与非托管钱包:有什么区别?

2026-09-17 03:19:46

托管钱包定义1. 托管钱包是一种由第三方服务提供商持有和管理用户私钥的数字资产存储解决方案。 2. 用户通过电子邮件、密码和双因素身份验证等登录凭据访问资金,而不是直接加密控制。 3. 简化帐户恢复——忘记密码或失去设备访问权限的用户可以通过平台管理的身份验证协议重新获得访问权限。 4. 这些钱包通...

什么是多重签名钱包以及它何时有用?

什么是多重签名钱包以及它何时有用?

2026-09-12 14:20:01

定义及核心架构1. 多重签名钱包是一种加密结构,需要多个私钥来授权单个区块链交易。 2. 它在M-of-N 签名方案下运行,其中M表示所需的最小签名数量, N表示授权签名者的总数。 3. 每个签名者生成独立的密钥对;他们的公钥被共同嵌入到通过确定性散列导出的唯一链上地址中。 4. 没有任何一个参与者...

Bitcoin 与闪电网络:有什么区别?

Bitcoin 与闪电网络:有什么区别?

2026-09-13 15:40:16

核心架构及交易模型1. Bitcoin 在单层、无需许可的区块链上运行,其中每笔交易都经过加密验证,在数千个全节点上传播,并大约每十分钟永久记录在连续块中。 2. 闪电网络作为直接构建在 Bitcoin 的 UTXO 模型之上的点对点覆盖网络,依赖于由时间锁定、可撤销的承诺交易强制执行的双向支付通道...

查看所有文章

User not found or password invalid

Your input is correct