市值: $2.6437T 0.10%
成交额(24h): $40.0551B -59.47%
恐惧与贪婪指数:

68 - 贪婪

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

选择语种

选择语种

选择货币

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

什么是重入攻击以及如何在合约中防止它?

Reentrancy attacks exploit unchecked external calls in smart contracts, allowing attackers to drain funds by re-entering functions before state updates—highlighted by the $60M DAO hack.

2025/11/10 16:20

了解智能合约中的重入攻击

1. 当恶意合约在初始执行完成之前反复回调易受攻击的函数时,就会发生重入攻击。这种递归行为利用了智能合约中外部调用的顺序和状态变化。

2. 核心漏洞在于在更新内部状态之前发送资金或进行外部调用的合约。攻击者可以利用这个窗口,通过重新进入提现功能来多次提现资金。

3. 最臭名昭著的例子之一是 2016 年的 DAO 黑客事件,由于可重入缺陷,价值超过 6000 万美元的以太币被耗尽。攻击者使用后备函数递归调用提款机制。

4. 这些攻击不仅限于以太币传输。如果没有适当的保护措施,对用户控制的合约的任何外部调用都可能被武器化。

5.重入仍然是去中心化应用程序中最关键的安全风险之一,特别是在处理大量用户资金的 DeFi 协议中。

支持重入的常见模式

1. 遵循“先调用,后更新”模式的合约本质上很容易受到影响。在减少用户余额之前发送以太币或代币允许攻击者重新进入,更新后的余额仍反映原始金额。

2. 依赖于低级调用(如call()delegatecall()send()且未经适当检查的函数会增加暴露风险。这些方法会触发接收者的回退或接收功能,其中可能包含恶意逻辑。

3. 拉拉-推式支付模式使用不当会带来风险。基于推送的系统在交易期间主动发送资金,为递归利用创造了机会。

4.跨多个接口的复杂合约交互放大了危险。当一个合约调用另一个合约并且两者都具有可变状态时,跟踪执行流程变得困难,从而增加了监督的机会。

5.如果状态更新不是原子的并且在外部交互之后发生,即使看似安全的代码也可能受到损害。

有效的预防策略

1. 严格应用检查-效果-交互 (CEI) 模式。始终验证输入,更新内部状态变量,然后才进行外部调用。该序列消除了重新进入窗口。

2. 使用 OpenZeppelin 的ReentrancyGuard等库提供的互斥锁或重入防护。它们强制执行锁定机制,防止函数在执行时重新进入。

3.限制低级调用的使用。更喜欢像transfer()这样的高级传输函数,它们具有内置的保护,例如通常会阻止递归执行的气体津贴限制。

4. 实施提款模式而不是直接付款。让用户通过单独的功能发起资金检索,最大限度地减少敏感操作期间的外部调用次数。

5.应将定期审计和静态分析工具集成到开发生命周期中,以在部署之前检测潜在的重入向量。

常见问题解答

回退函数在重入攻击中的作用是什么?当合约收到没有数据的以太币时,回退函数会自动执行。攻击者精心设计恶意回退,重新调用易受攻击的函数,从而创建一个循环,在原始交易完成之前耗尽资金。

同一个合约中的不同函数之间可以发生重入吗?是的。当一个函数进行外部调用并返回到同一合约的另一个函数时,就会发生跨函数重入,从而利用尚未更新的共享状态。适当的国家管理和警卫对于阻止此类路径至关重要。

代理合约是否不受重入影响?不会。如果逻辑实现包含未经检查的外部调用,代理合约仍然容易受到攻击。由于代理将调用委托给可升级的逻辑合约,因此逻辑层中的任何缺陷(包括可重入性)仍然可以被利用。

Gas 限制如何影响重入尝试?一些早期的防御依赖于消耗所有可用的气体来阻止递归。然而,现代攻击通过使用精确的气体估计来规避这一点。仅仅依靠gas limit是不可靠的;结构代码模式提供更强的保护。

免责声明:info@kdj.com

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

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

相关百科

如何查看DOGE期货成交量及持仓量?

如何查看DOGE期货成交量及持仓量?

2026-09-12 08:39:38

了解 DOGE 期货交易量1. 期货交易量是指在特定时间范围内交易的DOGE份期货合约的总数,通常以每天或每小时计算。 2. 高成交量通常表明市场参与度较高,并且可以表明潜在的趋势延续或逆转,具体取决于价格走势背景。 3. 交易者监控交易量峰值以及突破或崩溃,以评估合法性——交易量上升支持的持续价格...

如何查看BTC期货交易量和持仓量?

如何查看BTC期货交易量和持仓量?

2026-09-12 15:19:55

BTC期货指标的数据源1. CoinGlass API v4 提供 30 多个交易所的实时融资利率、清算热图和精细的未平仓合约细分。 2. 币安期货 API 提供对买卖深度、合约特定交易量历史记录和保证金比率快照的本机访问。 3. OKX 数据门户提供可下载的 CSV 档案,其中包含每日结算价格、按...

如何看懂DOGEUSDT永续合约图表?

如何看懂DOGEUSDT永续合约图表?

2026-09-11 19:19:48

了解 DOGEUSDT 永续图表上的价格走势1. 蜡烛图的形成揭示了直接的市场情绪——绿色蜡烛表示买盘占主导地位,而红色蜡烛则反映该区间内的抛售压力。 2. 实体上方和下方的灯芯信号拒绝更高或更低的价格;在波动较大的模因币市场中,长上影线通常先于短期反转。 3. 接近关键水平的连续小实体蜡烛表明在突...

如何阅读币安上的ETHUSDT期货图表?

如何阅读币安上的ETHUSDT期货图表?

2026-09-13 05:20:26

Bitcoin 减半机制1. 每产生 210,000 个区块,Bitcoin 个矿工的区块奖励减半。 2. 此事件大约每四年发生一次,并被硬编码到 Bitcoin 的协议中。 3. 最近一次减半将每个区块的奖励从 6.25 BTC 减少到 3.125 BTC。 4. 总供应上限仍固定在 2100 万...

如何查询币安Bitcoin合约资金费用?

如何查询币安Bitcoin合约资金费用?

2026-09-13 18:00:17

Bitcoin 减半机制1. Bitcoin 的协议强制执行固定的发行时间表,其中大约每 210,000 个区块,区块奖励就会减少一半。 2. 该事件大约每四年发生一次,直接减少了新进入流通的 BTC 数量。 3.截至2020年减半,矿工每区块获得6.25 BTC;下一次减少将达到 3.125 BT...

如何在币安查看BTC合约资金费用?

如何在币安查看BTC合约资金费用?

2026-09-10 08:00:06

找到资金费率显示1. 进入币安合约交易界面,选择BTCUSDT永续合约。 2. 观察价格图表正下方或订单簿附近的区域——该区域包含一个标有资金费率的标签框。 3. 显示值实时更新,反映当前每小时的资金费率,无论是正数还是负数。 4. 单击资金费率框将打开一个弹出窗口,显示多个结算周期的历史资金价值。...

如何查看DOGE期货成交量及持仓量?

如何查看DOGE期货成交量及持仓量?

2026-09-12 08:39:38

了解 DOGE 期货交易量1. 期货交易量是指在特定时间范围内交易的DOGE份期货合约的总数,通常以每天或每小时计算。 2. 高成交量通常表明市场参与度较高,并且可以表明潜在的趋势延续或逆转,具体取决于价格走势背景。 3. 交易者监控交易量峰值以及突破或崩溃,以评估合法性——交易量上升支持的持续价格...

如何查看BTC期货交易量和持仓量?

如何查看BTC期货交易量和持仓量?

2026-09-12 15:19:55

BTC期货指标的数据源1. CoinGlass API v4 提供 30 多个交易所的实时融资利率、清算热图和精细的未平仓合约细分。 2. 币安期货 API 提供对买卖深度、合约特定交易量历史记录和保证金比率快照的本机访问。 3. OKX 数据门户提供可下载的 CSV 档案,其中包含每日结算价格、按...

如何看懂DOGEUSDT永续合约图表?

如何看懂DOGEUSDT永续合约图表?

2026-09-11 19:19:48

了解 DOGEUSDT 永续图表上的价格走势1. 蜡烛图的形成揭示了直接的市场情绪——绿色蜡烛表示买盘占主导地位,而红色蜡烛则反映该区间内的抛售压力。 2. 实体上方和下方的灯芯信号拒绝更高或更低的价格;在波动较大的模因币市场中,长上影线通常先于短期反转。 3. 接近关键水平的连续小实体蜡烛表明在突...

如何阅读币安上的ETHUSDT期货图表?

如何阅读币安上的ETHUSDT期货图表?

2026-09-13 05:20:26

Bitcoin 减半机制1. 每产生 210,000 个区块,Bitcoin 个矿工的区块奖励减半。 2. 此事件大约每四年发生一次,并被硬编码到 Bitcoin 的协议中。 3. 最近一次减半将每个区块的奖励从 6.25 BTC 减少到 3.125 BTC。 4. 总供应上限仍固定在 2100 万...

如何查询币安Bitcoin合约资金费用?

如何查询币安Bitcoin合约资金费用?

2026-09-13 18:00:17

Bitcoin 减半机制1. Bitcoin 的协议强制执行固定的发行时间表,其中大约每 210,000 个区块,区块奖励就会减少一半。 2. 该事件大约每四年发生一次,直接减少了新进入流通的 BTC 数量。 3.截至2020年减半,矿工每区块获得6.25 BTC;下一次减少将达到 3.125 BT...

如何在币安查看BTC合约资金费用?

如何在币安查看BTC合约资金费用?

2026-09-10 08:00:06

找到资金费率显示1. 进入币安合约交易界面,选择BTCUSDT永续合约。 2. 观察价格图表正下方或订单簿附近的区域——该区域包含一个标有资金费率的标签框。 3. 显示值实时更新,反映当前每小时的资金费率,无论是正数还是负数。 4. 单击资金费率框将打开一个弹出窗口,显示多个结算周期的历史资金价值。...

查看所有文章

User not found or password invalid

Your input is correct