当前位置: 首页 > wzjs >正文

山东网站建设网站seo免费优化网站

山东网站建设网站,seo免费优化网站,黑河网站建设公司,怎么修改wordpress布局🛡️ 智能合约安全专题(一):什么是重入攻击?——从 DAO 事件谈起 “DAO 攻击的本质,是一个简单但致命的逻辑顺序错误。” 本文将带你看懂什么是重入攻击,它是如何发生的,又该如何避免…


🛡️ 智能合约安全专题(一):什么是重入攻击?——从 DAO 事件谈起

“DAO 攻击的本质,是一个简单但致命的逻辑顺序错误。”

本文将带你看懂什么是重入攻击,它是如何发生的,又该如何避免它。


💣 一、重入攻击是什么?

重入攻击(Reentrancy Attack) 是一种利用智能合约执行过程中“外部调用未完成就重复进入当前函数”的漏洞,攻击者可以在未更新状态前多次调用目标函数,从而重复提取资金或资源

通俗理解:

本来你打算先扣钱再发货,结果却先发货,钱还没扣,用户多次点击“下单”就拿走了很多件货。


🧪 二、经典示例:The DAO 如何被攻击?

在 DAO 的合约中,存在如下逻辑:

function withdraw() public {require(balances[msg.sender] > 0);// 1. 转账给用户(外部调用)msg.sender.call.value(balances[msg.sender])();// 2. 然后将余额置为0balances[msg.sender] = 0;
}

问题是:

  • Solidity 的 call.value() 会执行 msg.sender 的 fallback 函数(即攻击者的合约函数)

  • 攻击者的 fallback 函数中再次调用 withdraw()

  • 因为还没执行 balances[msg.sender] = 0,所以余额还在,可以再次转账

  • 如此循环,直到合约资金被耗尽

攻击者合约伪代码如下:

function fallback() external payable {if (address(target).balance > 0) {target.withdraw();}
}

🧠 三、重入攻击的条件

重入攻击并不是“万能钥匙”,它需要满足以下条件:

条件描述
🔁 外部调用目标合约必须对外部合约或地址发起调用(比如转账)
⏳ 状态延迟更新目标合约在调用外部合约之前没有先更新状态
🔁 可重入函数目标函数没有限制“再次调用”或“互斥锁”
💰 有利益可盗被攻击函数能转出资金或重要资源

🛡️ 四、如何防止重入攻击?

✅ 1. 检查-效果-交互(CEI 模式

推荐做法

  1. 检查:验证参数、条件

  2. 效果:更新合约内部状态

  3. 交互:最后才调用外部合约或发送资金

function withdraw() public {uint amount = balances[msg.sender];require(amount > 0);balances[msg.sender] = 0; // 状态先更新!(bool success, ) = msg.sender.call{value: amount}("");require(success, "Transfer failed.");
}

✅ 2. 使用 reentrancyGuard

OpenZeppelin 提供了一个标准的 ReentrancyGuard 工具,使用 nonReentrant 修饰函数,阻止嵌套调用:

import "@openzeppelin/contracts/security/ReentrancyGuard.sol";contract Bank is ReentrancyGuard {function withdraw() public nonReentrant {// 安全的提取逻辑}
}

✅ 3. 使用 transfer()send() 限制 Gas

虽然不推荐(因 EIP-1884 改变 Gas 限制),但早期使用 .transfer() 的 2300 gas 限制可阻止复杂合约执行 fallback 函数。


🧯 五、重入攻击之后:Solidity 与社区的演化

DAO 攻击后,Solidity 与社区做了多项改进:

改进描述
ReentrancyGuard成为智能合约防御标准配置
🔧 开发者工具各种静态分析工具支持检测重入风险(如 Slither、MythX)
🧪 安全审计合约上线前必须通过专业审计
📝 编码规范CEI 模式成为默认模式

🧩 六、真实案例简析

除了 DAO,还有多个知名项目因重入攻击损失惨重:

  • SpankChain(2018):因未更新状态即转账,被攻击者提走 40000 美元

  • dForce/Lendf.me(2020):DeFi 项目遭重入漏洞被盗走近 2500 万美元


🧠 七、小结

问题回答
💥 重入攻击是如何发生的?合约外部调用时被恶意“递归调用”,因为状态尚未更新
🔐 如何防御?按照 CEI 模式设计、使用 nonReentrant、避免复杂 fallback
🚨 教训是什么?智能合约不可修改,必须在上线前 100% 审核与测试

📘 延伸阅读

  • Solidity 官方安全建议

  • OpenZeppelin 安全指南

http://www.dtcms.com/wzjs/280054.html

相关文章:

  • 网站建设与维护课程总结网络营销软文范文
  • 做阿里巴巴1688网站程序农大南路网络营销推广优化
  • 郑州建设厅官方网站微信营销的特点
  • 网站建设教程照片怎样进行seo推广
  • 政府网站开发用什么工具长沙搜索排名优化公司
  • 网站应如何设计推广方案范例
  • 外国字体网站企业建站
  • 网站建设和网络优化福州百度首页优化
  • 一个网站做局打水今天最新军事新闻视频
  • 如何打击网站长尾关键词排名系统
  • 网站运营分析竞争对手科学新概念外链平台
  • 网页设计与制作学些什么seo推广网站
  • 房地产网站建设提案100种宣传方式
  • 做视频网站付费版aso优化师
  • wordpress页面制作视频seo优缺点
  • 烟台专门做网站的网络营销策略包括哪些
  • 美国做简历的网站网络营销推广的方法
  • 汶上1500元网站建设长沙本地推广平台
  • 公司网站建设的不足站长之家seo工具包
  • 百度站长平台链接提交市场营销推广活动方案
  • asp 网站路径泄露 解决中国没有限制的搜索引擎
  • asp网站手机模版前端seo怎么优化
  • 购物网站开发原理广告投放平台公司
  • 上海网站建设招标nba赛季排名
  • 全面的手机网站建设搜索引擎推广seo
  • wordpress 管理员武汉seo和网络推广
  • 机械厂做网站到底有没有效果百度推广关键词质量度
  • qt做网站界面百度百科入口
  • 网站开发能不能用win7系统网站建设一般多少钱
  • 外贸网站推广如何做全网推广外包公司