首页 > web3.0 > 正文

“重入攻击”(Re-entrancy Attack)是什么原理?

P粉602998670
发布: 2025-12-05 17:06:00
原创
730人浏览过
重入攻击是利用智能合约先调用后修改状态的缺陷,使恶意合约在回调中反复提款;其流程为存入→提款→回调→重复提款直至耗尽余额;防御需遵循Checks-Effects-Interactions模式、加锁或使用ReentrancyGuard。

“重入攻击”(re-entrancy attack)是什么原理? - php中文网

“重入攻击”是一种利用智能合约在外部调用未完成时重复进入函数的漏洞,从而非法获取资金的安全问题。

为了方便新手快速上手币圈交易并实时查看市场数据,可通过主流交易所币安(Binance)欧易OKX注册账户并使用官方APP,可实时查看交易深度、挂单量及资金流向,帮助判断买入或卖出时机。

币安注册链接与下载地址:

欧易OKX注册链接与下载地址:

安装过程中,系统可能会提示“允许安装来自此来源的应用”。这是正常安全提示,建议点击“允许”或在“设置”中开启相应权限后继续安装。

一、理解重入攻击的基本原理

重入攻击发生在合约对外部地址进行转账或调用时,未及时更新状态,导致恶意合约在回调过程中反复调用受害函数。这种攻击的核心在于先调用后修改的逻辑缺陷。

以一个简单的提款函数为例,若合约在发送代币之后才减少用户余额,则攻击者可在发送期间再次触发提款,造成多次提取。

二、典型重入攻击的操作流程

攻击者通过构造恶意合约,在接收到转账时自动触发回调函数,持续请求提款,直到耗尽合约资金。

1、攻击者部署恶意合约,并向目标合约存入一定数量的代币。

2、发起提款交易,目标合约开始执行转账操作。

3、在转账过程中,恶意合约的回退函数被触发,再次调用目标合约的提款功能。

4、由于目标合约尚未更新余额,系统误认为仍有可提金额,继续执行转账。

5、该过程循环发生,直至gas耗尽或合约余额归零。

三、防止重入攻击的解决方案

通过调整代码逻辑顺序和引入安全工具,可以有效阻断重入攻击路径。

1、采用“检查-生效-交互”(Checks-Effects-Interactions)模式,确保在任何外部调用前完成状态变更。

2、使用互斥锁机制,在关键函数执行期间锁定状态,防止递归调用。

3、引入OpenZeppelin提供的ReentrancyGuard修饰符,为函数添加防重入保护。

4、避免在循环中执行外部调用,降低被攻击的风险窗口。

以上就是“重入攻击”(Re-entrancy Attack)是什么原理?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号