溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

visibility指定符不當(dāng)使用導(dǎo)致Dapp漏洞的示例分析

發(fā)布時(shí)間:2022-01-18 14:33:23 來(lái)源:億速云 閱讀:87 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這篇文章主要為大家分析了visibility指定符不當(dāng)使用導(dǎo)致Dapp漏洞的示例分析的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì)易懂,操作細(xì)節(jié)合理,具有一定參考價(jià)值。如果感興趣的話,不妨跟著跟隨小編一起來(lái)看看,下面跟著小編一起深入學(xué)習(xí)“visibility指定符不當(dāng)使用導(dǎo)致Dapp漏洞的示例分析”的知識(shí)吧。

Solidity函數(shù)有visibility指定符,標(biāo)明函數(shù)如何被允許訪問(wèn)。Visibility決定一個(gè)函數(shù)是否能被用戶,被其他派生合約,從外部調(diào)用,僅從內(nèi)部調(diào)用等等。有4個(gè)visibility指定符.函數(shù)默認(rèn)的visibility指定符是public – 允許用戶外部調(diào)用。visibility 指定符的不正當(dāng)使用可能導(dǎo)致災(zāi)難性的漏洞。

攻擊原理

函數(shù)默認(rèn)的visibility指定符是public。沒(méi)有指定函數(shù)visibility指定符的話,那就被認(rèn)定是public,意味著該函數(shù)就會(huì)允許外部用戶調(diào)用。當(dāng)開(kāi)發(fā)程序員對(duì)本應(yīng)該是private(只能從合約內(nèi)部訪問(wèn)調(diào)用)的函數(shù)錯(cuò)誤的沒(méi)有指定visibility指定符,就會(huì)引入漏洞。請(qǐng)看下面的例子:

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);

     }

}

這個(gè)簡(jiǎn)單的合約是一個(gè)猜地址獲取獎(jiǎng)勵(lì)的游戲。用戶必須生成一個(gè)以太坊地址,如果它的16進(jìn)制的后8位都是0,就可以贏得游戲。一旦贏得游戲,他們就可以通過(guò)調(diào)用WithdrawWinnings()函數(shù)來(lái)獲得獎(jiǎng)勵(lì)。但是,很不幸,函數(shù)的visibility并沒(méi)有被指定,特別是_sendWinnings() 函數(shù)是public 并且任何地址都可以調(diào)用這個(gè)函數(shù)來(lái)偷取獎(jiǎng)勵(lì)。

防護(hù)技術(shù)

在智能合約編程的時(shí)候,最好給所有函數(shù)來(lái)指定函數(shù)的visibility,即使他們是intentionally public. 最近的Solidity版本加入了對(duì)未顯式指定visibility指定符的編譯警告。

關(guān)于“visibility指定符不當(dāng)使用導(dǎo)致Dapp漏洞的示例分析”就介紹到這了,更多相關(guān)內(nèi)容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請(qǐng)多多支持億速云網(wǎng)站!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI