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

微企免费做网站360收录提交

微企免费做网站,360收录提交,仙游有人做网站,优跃达官网网站建设项目请找出下列合约漏洞#xff0c;并说明如何盗取ContractB 中的数字资产#xff0c;并修复合约。中说明#xff1a;ContractB 的contract_a接口为ContractA 地址 pragma solidity ^0.8.21; interface ContractA {function get_price() external view returns (uint256); }int…请找出下列合约漏洞并说明如何盗取ContractB 中的数字资产并修复合约。中说明ContractB 的contract_a接口为ContractA 地址 pragma solidity ^0.8.21; interface ContractA {function get_price() external view returns (uint256); }interface ERC20 {function balanceOf(address) external view returns (uint256);function transfer(address, uint256) external returns (bool);}interface UniswapV2Pair {function transfer(address, uint) external returns (bool);function mint(address to) external returns (uint ) ;function burn(address to) external returns (uint , uint );}contract ContractB {ContractA contract_a;UniswapV2Pair _uniswapV2Pair;ERC20 token0;ERC20 token1;uint256 liquidity;address public _owner;mapping (address uint256) private _balances;bool checktrue;modifier noreentrancy(){require(check);checkfalse;_;checktrue;}constructor(address owner){_ownerowner;}function setcontracta(address addr,address uniswapV2Pair,address _token0,address _token1) public {require(msg.sender_owner);contract_a ContractA(addr);_uniswapV2Pair UniswapV2Pair(uniswapV2Pair);token0ERC20(_token0);token1ERC20(_token1);}function depositFunds() public payable noreentrancy(){uint256 mintamountmsg.value*contract_a.get_price()/10e8;_balances[msg.sender]mintamount;}function withdrawFunds(uint256 burnamount) public payable noreentrancy(){_balances[msg.sender]-burnamount;uint256 amountburnamount*10e8/contract_a.get_price();msg.sender.call{value:amount}();}function balanceof(address acount)public view returns (uint256){return _balances[acount];}}pragma solidity ^0.8.21;contract ContractA {uint256 private _totalSupply;uint256 private _allstake;mapping (address uint256) public _balances;bool checktrue;modifier noreentrancy(){require(check);checkfalse;_;checktrue;}constructor(){}function get_price() public view virtual returns (uint256) {if(_totalSupply0||_allstake0) return 10e8;return _totalSupply*10e8/_allstake;}function deposit() public payable noreentrancy(){uint256 mintamountmsg.value*get_price()/10e8;_allstakemsg.value;_balances[msg.sender]mintamount;_totalSupplymintamount;}function withdraw(uint256 burnamount) public noreentrancy(){uint256 sendamountburnamount*10e8/get_price();_allstake-sendamount;payable(msg.sender).call{value:sendamount}();_balances[msg.sender]-burnamount;_totalSupply-burnamount;}}这段 Solidity 代码中存在一个关键的漏洞允许攻击者在 ContractB 中盗取数字资产。攻击者可以利用 withdrawFunds 函数中的漏洞来实现攻击让我们一步步分析和修复这个问题。 漏洞分析 在 withdrawFunds 函数中合约从 _balances[msg.sender] 减去了 burnamount然后使用 msg.sender.call{value:amount}(); 从合约向调用者地址发送以太币。 这里的漏洞是没有重入保护机制的。攻击者可以通过多次调用 withdrawFunds 函数来进行重入攻击每次都可以取回以太币并重复扣除 _balances[msg.sender]。 攻击步骤 攻击者在合约中调用 depositFunds 函数来存入以太币生成相应数量的代币。 攻击者多次调用 withdrawFunds 函数重入攻击使 _balances[msg.sender] 不断减少而每次调用都会从合约中取回相同数量的以太币。 因此攻击者可以重复取回代币并获得更多的以太币。 修复漏洞 为了修复这个漏洞需要在 withdrawFunds 函数中添加重入保护。以下是修复后的代码 bool private checkReentrancy true;modifier noreentrancy() {require(checkReentrancy, Reentrant call detected);checkReentrancy false;_;checkReentrancy true; }function withdrawFunds(uint256 burnamount) public payable noreentrancy() {require(_balances[msg.sender] burnamount, Insufficient balance);_balances[msg.sender] - burnamount;uint256 amount burnamount * 10e8 / contract_a.get_price();(bool success, ) msg.sender.call{value: amount}();require(success, Transfer failed); }在修复的代码中我们在 withdrawFunds 函数内添加了一个 checkReentrancy 布尔变量用于保护函数免受重入攻击。在函数调用之前我们要求 checkReentrancy 为 true并在函数开始时将其设置为 false以防止多次进入。 注意 重入攻击是一种常见的智能合约漏洞请务必在编写合约时采取适当的重入保护措施。此处提供的修复只是一个示例根据实际情况和需求可能需要进行进一步的安全性和逻辑审查。在部署和使用智能合约时务必注意审查合约代码测试合约的各种情况以确保安全性和可靠性。
http://www.w-s-a.com/news/90174/

相关文章:

  • 网站导航页怎么做wordpress数据库批量替换
  • wordpress站点更换域名自己做wordpress 模版
  • 怎么做虚拟的网站东莞常平邮编是多少
  • 电子商务网站和普通网站的区别正规网站建设多少费用
  • 郴州免费招聘网站前端好还是后端好
  • 织梦网站怎样做子域名20个中国风网站设计欣赏
  • wordpress网站搬简约创意logo图片大全
  • 叙述网站制作的流程石家庄58同城最新招聘信息
  • 南昌微信网站建设东莞网站优化软件
  • 爱站数据官网纯静态网站挂马
  • 网站建设公司未来方向3d设计网站
  • 建设部网站 干部学院 一级注册建筑师培训 2014年做网站开发的提成多少钱
  • 网上请人做软件的网站铝合金型材外发加工网
  • 手机网站建设万网山东省作风建设网站
  • 网站策划专员招聘50万县城做地方网站
  • 网站开发公司+重庆wordpress自定义搜索界面
  • 梅州南站学校官网
  • 网站变灰代码 所有浏览器企业邮箱域名怎么填写
  • 网站建设哪好旅行社网站模板
  • 网站开发发展存在的问题交换链接营销的经典案例
  • 烟台高端网站建设公司福田市网站建设推广
  • 做网站如何保证询盘数量智慧城市
  • 大连网站平台研发wordpress更改地址
  • 做标书要不要做网站南昌网站排名优化费用
  • 网站内容如何自动关联新浪微博万网域名信息
  • 网站出售网络推广服务费计入什么科目
  • 宁波咨询网站设计西安网站制作开发
  • 深圳市专注网站建设全网营销网络推广
  • 如何快速建设网站虚拟空间软件
  • 一个虚拟主机可以做几个网站免费软件下载中心