市值: $2.641T 0.40%
成交额(24h): $98.8166B 16.07%
恐惧与贪婪指数:

68 - 贪婪

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

选择语种

选择语种

选择货币

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

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

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. 该技术模仿了sendtransfer的 Gas 津贴,将执行限制为 2300 Gas。

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

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

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

常见问题解答

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

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

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

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

免责声明: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. 接近关键水平的连续小实体蜡烛表明在突...

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

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

2026-09-10 08:00:06

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

如何计算SOLUSDT期货盈亏?

如何计算SOLUSDT期货盈亏?

2026-09-10 19:19:37

了解 SOLUSDT 期货合约规格1、每张SOLUSDT期货合约均以USDT报价,以USDT结算,为线性永续合约。 2.基础资产为SOL,报价资产为USDT——所有盈亏计算均直接以USDT计价。 3. 价格变动的最小变动单位为0.01 USDT,合约乘数固定为每张合约1 SOL。 4. Bitget...

如何计算XRPUSDT期货盈亏?

如何计算XRPUSDT期货盈亏?

2026-09-09 17:40:21

了解 XRPUSDT 期货合约规格1、每张XRPUSDT永续合约以USDT报价,以USDT结算,每张合约面值为1XRP。 2. 对于包括 Binance 和 Bybit 在内的大多数主要交易所,最小价格增量(报价单位)为 0.0001 美元。 3. 杠杆范围从 1 倍到 75 倍不等,具体取决于头寸...

如何查看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. 接近关键水平的连续小实体蜡烛表明在突...

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

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

2026-09-10 08:00:06

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

如何计算SOLUSDT期货盈亏?

如何计算SOLUSDT期货盈亏?

2026-09-10 19:19:37

了解 SOLUSDT 期货合约规格1、每张SOLUSDT期货合约均以USDT报价,以USDT结算,为线性永续合约。 2.基础资产为SOL,报价资产为USDT——所有盈亏计算均直接以USDT计价。 3. 价格变动的最小变动单位为0.01 USDT,合约乘数固定为每张合约1 SOL。 4. Bitget...

如何计算XRPUSDT期货盈亏?

如何计算XRPUSDT期货盈亏?

2026-09-09 17:40:21

了解 XRPUSDT 期货合约规格1、每张XRPUSDT永续合约以USDT报价,以USDT结算,每张合约面值为1XRP。 2. 对于包括 Binance 和 Bybit 在内的大多数主要交易所,最小价格增量(报价单位)为 0.0001 美元。 3. 杠杆范围从 1 倍到 75 倍不等,具体取决于头寸...

查看所有文章

User not found or password invalid

Your input is correct