重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要为大家分析了visibility指定符不当使用导致Dapp漏洞的示例分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“visibility指定符不当使用导致Dapp漏洞的示例分析”的知识吧。
超过十多年行业经验,技术领先,服务至上的经营模式,全靠网络和口碑获得客户,为自己降低成本,也就是为客户降低成本。到目前业务范围包括了:成都网站建设、成都网站制作,成都网站推广,成都网站优化,整体网络托管,小程序制作,微信开发,成都app软件开发公司,同时也可以让客户的网站和网络营销和我们一样获得订单和生意!
Solidity函数有visibility指定符,标明函数如何被允许访问。Visibility决定一个函数是否能被用户,被其他派生合约,从外部调用,仅从内部调用等等。有4个visibility指定符.函数默认的visibility指定符是public – 允许用户外部调用。visibility 指定符的不正当使用可能导致灾难性的漏洞。
函数默认的visibility指定符是public。没有指定函数visibility指定符的话,那就被认定是public,意味着该函数就会允许外部用户调用。当开发程序员对本应该是private(只能从合约内部访问调用)的函数错误的没有指定visibility指定符,就会引入漏洞。请看下面的例子:
contract HashForEther { function withdrawWinnings() { // Winner if the last 8 hex characters of the address are 0. require(uint32(msg.sender) == 0); _sendWinnings(); } function _sendWinnings() { msg.sender.transfer(this.balance); } }
这个简单的合约是一个猜地址获取奖励的游戏。用户必须生成一个以太坊地址,如果它的16进制的后8位都是0,就可以赢得游戏。一旦赢得游戏,他们就可以通过调用WithdrawWinnings()函数来获得奖励。但是,很不幸,函数的visibility并没有被指定,特别是_sendWinnings() 函数是public 并且任何地址都可以调用这个函数来偷取奖励。
在智能合约编程的时候,最好给所有函数来指定函数的visibility,即使他们是intentionally public. 最近的Solidity版本加入了对未显式指定visibility指定符的编译警告。
关于“visibility指定符不当使用导致Dapp漏洞的示例分析”就介绍到这了,更多相关内容可以搜索创新互联以前的文章,希望能够帮助大家答疑解惑,请多多支持创新互联网站!