温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用构造函数导致Dapp漏洞的示例分析

发布时间:2022-01-18 14:32:35 来源:亿速云 阅读:117 作者:柒染 栏目:互联网科技

使用构造函数导致Dapp漏洞的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

构造函数是一个比较特殊的函数,在构造函数里会执行一些初始化合约是比较关键的功能。在Solidity 版本0.4.22之前,构造函数是一个和合约同名的函数。所以如果在开发过程中,合约名变了的话,如果构造函数名没有发生变化,原来的构造函数就会变成常规的可以调用的函数。这就会导致合约漏洞。

攻击原理

合约名变了的话,或者构造函数有一个输入错误,这会导致函数名和合约名不一致。这个时候,构造函数就是一个常规的函数。如果构造函数里执行了一些已授权的专有操作,就会导致严重的后果。看看下面的合约代码:

 contract OwnerWallet {
  address public owner;
  //constructor
  function ownerWallet(address _owner) public {
  owner = _owner;
  }
  
  // fallback. Collect ether.
   function () payable {} 
  
  function withdraw() public {
  require(msg.sender == owner); 
  msg.sender.transfer(this.balance);
  }
 }

这个合约接受ether充值,并且仅允许合约所有者可以用withdraw()函数提取。如果构造函数变成了常规函数的话,任何用户都可以调用ownerWallet函数,把他们自己设置成为合约的所有者,然后调用withdraw提取合约里所有的资金。

防护技术

这个问题主要发生在Solidity编译器版本 0.4.22. 这个版本引入了一个constructor关键字来表明一个构造函数,而不再要求构造函数名和合约名一致。建议使用constructor关键字来防止以后高版本带来的命名问题。

看完上述内容,你们掌握使用构造函数导致Dapp漏洞的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI