您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了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漏洞的示例分析”就介紹到這了,更多相關內容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網站!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。