市值: $2.6211T 0.33%
成交额(24h): $44.7391B 21.75%
恐惧与贪婪指数:

33 - 恐惧

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

选择语种

选择语种

选择货币

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

如何保护您的智能合约免受重入攻击?

Reentrancy vulnerabilities arise when external calls precede state updates, enabling malicious recursive calls—mitigated by Checks-Effects-Interactions, ReentrancyGuard, and cautious gas limits.

2026/01/23 10:39

了解重入漏洞

1. 重入攻击利用外部合约在初始函数执行完成之前回调到易受攻击的合约的能力。

2. 当状态更改在外部调用之前未最终确定时,就会发生这种情况,从而允许恶意代码重复操纵余额或标志。

3. 2016 年臭名昭著的 DAO 黑客事件展示了递归提款模式如何耗尽价值超过 6000 万美元的 ETH。

4. 此类漏洞在处理转账、提款或任何涉及外部调用和状态更新的逻辑的函数中大量出现。

5. 0.8.0 之前的 Solidity 版本缺乏内置的重入防护,这使得手动保护对于遗留部署至关重要。

检查-效果-交互模式的实现

1. 该架构规则要求所有内部状态修改发生在任何外部交互之前。

2. 例如,更新用户余额必须先于呼叫转移或呼叫另一个地址。

3. 违反此命令将为攻击者劫持控制流并重新进入同一功能打开大门。

4. 即使排序正确,开发人员也必须验证没有中间函数(例如事件发射器或修饰符)触发意外的外部调用。

5. 像 Slither 和 MythX 这样的工具可以在字节码和源代码的静态分析过程中检测到与此模式的偏差。

使用 ReentrancyGuard 修饰符

1. OpenZeppelin 的ReentrancyGuard是一个经过广泛审核的实用程序,它使用布尔标志锁定函数。

2. 修饰符在执行前将_status设置为_ENTERED ,并在完成后将其重置为_NOT_ENTERED 。

3. 由于活动锁,任何尝试重新进入同一受保护函数的嵌套调用都将恢复。

4. 除非所有敏感入口点共享相同的防护实例,否则它不会阻止跨功能重入。

5. 开发人员必须确保继承层次结构正确初始化保护状态并避免隐藏内部变量。

Gas 限制作为缓解策略

1. 明确限制在call.gas(2300)等低级调用中转发的 Gas 可以防止接收者合约执行复杂的逻辑。

2. 该技术模仿了send和transfer的 Gas 津贴,将执行限制为 2300 Gas。

3. 然而,仅仅依靠 Gas 限制是脆弱的——未来的 EVM 升级或自定义操作码可能会不可预测地改变 Gas 成本。

4. 它还破坏了与需要超过最少 Gas 来实现回退逻辑的合约的兼容性,例如执行日志记录或重新平衡的合约。

5. 基于气体的缓解措施应该补充而不是取代结构性保障措施,例如重入防护和国家命令。

常见问题解答

问:视图或纯函数中可以发生重入吗?答:不能。这些函数不能执行状态改变操作或外部调用,从而消除了递归干扰的可能性。

问:使用 delegatecall 是否可以防止重入?答:不是天生的。虽然delegatecall保留调用者的存储上下文,但如果目标逻辑包含不受保护的外部交互,它不会阻止可重入模式。

问:应付回退功能总是危险的吗?答:仅当它执行状态更新或外部调用而没有重入保护时。在没有副作用的情况下接受 ETH 的最小回退带来的风险可以忽略不计。

问:可升级的代理模式是否会增加重入风险?答:是的,如果实施合约缺乏适当的保护,并且代理在未经验证的情况下转发调用,攻击者可能会同时利用代理逻辑和业务逻辑。

免责声明:info@kdj.com

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

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

相关百科

如何计算持有 BTCUSDT 期货头寸的总成本

如何计算持有 BTCUSDT 期货头寸的总成本

2026-10-26 04:06:35

BTCUSDT 期货头寸的总成本构成1. 持有BTCUSDT期货头寸的总成本包括显性费用和隐性费用。显性成本包括开仓和平仓交易费用,而隐性成本主要来自一段时间内的资金费率支付或收入。 2. 开仓费用按照入场时的名义价值与交易所的吃单/挂单费用表的乘积计算——对于主要平台上的吃单来说,开仓费用通常在 ...

如何同时监控 XRPUSDT 资金费率和未平仓合约

如何同时监控 XRPUSDT 资金费率和未平仓合约

2026-10-20 18:39:42

XRPUSDT 永续合约的资金费率机制1. XRPUSDT永续合约的资金费率每八小时计算一次,使用XRP和USDT计价借贷市场之间的溢价指数和利差。 2. Binance、Bybit 和 OKX 等交易所在其衍生品 API 端点中发布实时资金费率数据,从而实现仪表板或警报系统的自动摄取。 3. 正的...

如何设置 SOLUSDT 永续合约盈亏平衡止损

如何设置 SOLUSDT 永续合约盈亏平衡止损

2026-10-23 09:34:18

了解盈亏平衡止损机制1. 盈亏平衡止损是一种动态订单,随着头寸盈利变动而向上调整,执行时锁定零净损失。 2. 它仅在交易达到预定利润阈值后才起作用——通常是初始风险或入场费的 1 至 2 倍。 3. 在币安 SOLUSDT 永续合约上,此逻辑必须手动触发或编写脚本,因为本机交易所 UI 不会自动将止...

如何使用币安期货计算器进行 ETHUSDT 交易

如何使用币安期货计算器进行 ETHUSDT 交易

2026-10-21 02:00:11

了解币安期货计算器界面1. 该计算器直接嵌入币安合约交易界面中,可通过订单输入面板下的 ETHUSDT 永续合约页面访问。 2. 随着用户调整输入字段(包括仓位大小、入场价格、杠杆水平以及止盈或止损水平),它会动态更新。 3. 接受多种格式的输入值:合约数量(ETH)、名义价值(USDT)或保证金金...

合约强平前如何查看BTCUSDT标记价格

合约强平前如何查看BTCUSDT标记价格

2026-10-26 12:20:18

了解BTCUSDT期货的标记价格1. 标记价格是交易所为防止市场波动期间出现不公平清算而使用的计算值。 2.反映了来自多个来源的公平、稳定的参考价格,包括指数价格和资金费率。 3. 与最新成交价不同,标记价格包含来自顶级现货交易所的时间加权平均值,以降低操纵风险。 4. 在币安上,BTCUSDT标记...

如何调整 TRUMPUSDT 永续合约的杠杆

如何调整 TRUMPUSDT 永续合约的杠杆

2026-10-30 22:19:37

了解 TRUMPUSDT 永续合约机制1. TRUMPUSDT 是在多个一级衍生品交易所上市的主题永续期货合约,旨在跟踪围绕美国政治叙事而非基础资产基本面的价格情绪。 2、根据平台不同,采用标准的反向或线性结算逻辑,以USDT作为报价和保证金资产。 3. 合约使用的标记价格源自现货 BTC/USDT...

如何计算持有 BTCUSDT 期货头寸的总成本

如何计算持有 BTCUSDT 期货头寸的总成本

2026-10-26 04:06:35

BTCUSDT 期货头寸的总成本构成1. 持有BTCUSDT期货头寸的总成本包括显性费用和隐性费用。显性成本包括开仓和平仓交易费用,而隐性成本主要来自一段时间内的资金费率支付或收入。 2. 开仓费用按照入场时的名义价值与交易所的吃单/挂单费用表的乘积计算——对于主要平台上的吃单来说,开仓费用通常在 ...

如何同时监控 XRPUSDT 资金费率和未平仓合约

如何同时监控 XRPUSDT 资金费率和未平仓合约

2026-10-20 18:39:42

XRPUSDT 永续合约的资金费率机制1. XRPUSDT永续合约的资金费率每八小时计算一次,使用XRP和USDT计价借贷市场之间的溢价指数和利差。 2. Binance、Bybit 和 OKX 等交易所在其衍生品 API 端点中发布实时资金费率数据,从而实现仪表板或警报系统的自动摄取。 3. 正的...

如何设置 SOLUSDT 永续合约盈亏平衡止损

如何设置 SOLUSDT 永续合约盈亏平衡止损

2026-10-23 09:34:18

了解盈亏平衡止损机制1. 盈亏平衡止损是一种动态订单,随着头寸盈利变动而向上调整,执行时锁定零净损失。 2. 它仅在交易达到预定利润阈值后才起作用——通常是初始风险或入场费的 1 至 2 倍。 3. 在币安 SOLUSDT 永续合约上,此逻辑必须手动触发或编写脚本,因为本机交易所 UI 不会自动将止...

如何使用币安期货计算器进行 ETHUSDT 交易

如何使用币安期货计算器进行 ETHUSDT 交易

2026-10-21 02:00:11

了解币安期货计算器界面1. 该计算器直接嵌入币安合约交易界面中,可通过订单输入面板下的 ETHUSDT 永续合约页面访问。 2. 随着用户调整输入字段(包括仓位大小、入场价格、杠杆水平以及止盈或止损水平),它会动态更新。 3. 接受多种格式的输入值:合约数量(ETH)、名义价值(USDT)或保证金金...

合约强平前如何查看BTCUSDT标记价格

合约强平前如何查看BTCUSDT标记价格

2026-10-26 12:20:18

了解BTCUSDT期货的标记价格1. 标记价格是交易所为防止市场波动期间出现不公平清算而使用的计算值。 2.反映了来自多个来源的公平、稳定的参考价格,包括指数价格和资金费率。 3. 与最新成交价不同,标记价格包含来自顶级现货交易所的时间加权平均值,以降低操纵风险。 4. 在币安上,BTCUSDT标记...

如何调整 TRUMPUSDT 永续合约的杠杆

如何调整 TRUMPUSDT 永续合约的杠杆

2026-10-30 22:19:37

了解 TRUMPUSDT 永续合约机制1. TRUMPUSDT 是在多个一级衍生品交易所上市的主题永续期货合约,旨在跟踪围绕美国政治叙事而非基础资产基本面的价格情绪。 2、根据平台不同,采用标准的反向或线性结算逻辑,以USDT作为报价和保证金资产。 3. 合约使用的标记价格源自现货 BTC/USDT...

查看所有文章

User not found or password invalid

Your input is correct