温馨提示×

温馨提示×

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

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

visibility指定符不当使用导致Dapp漏洞的示例分析

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

这篇文章主要为大家分析了visibility指定符不当使用导致Dapp漏洞的示例分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“visibility指定符不当使用导致Dapp漏洞的示例分析”的知识吧。

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漏洞的示例分析”就介绍到这了,更多相关内容可以搜索亿速云以前的文章,希望能够帮助大家答疑解惑,请多多支持亿速云网站!

向AI问一下细节

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

AI