最新消息:图 床

以太坊智能合約安全入門了解一下(下)

COOL IAM 125浏览 0评论

作者:RickGray
作者博客:http://rickgray.me/2018/05/26/ethereum-smart-contracts-vulnerabilities-review-part2/

(註:本文分上/下兩部分完成,上篇鏈接《以太坊智能合約安全入門了解一下(上)》) 接上篇

3. Arithmetic Issues

算數問題?通常來說,在編程語言里算數問題導致的漏洞最多的就是整數溢出了,整數溢出又分為上溢和下溢。整數溢出的原理其實很簡單,這裡以 8 位無符整型為例,8 位整型可表示的範圍為 [0, 255]255 在內存中存儲按位存儲的形式為(下圖左):

為了防止整數溢出的發生,一方面可以在算術邏輯前後進行驗證,另一方面可以直接使用 OpenZeppelin 維護的一套智能合約函數庫中的 SafeMath 來處理算術邏輯。

4. Unchecked Return Values For Low Level Calls

未嚴格判斷不安全函數調用返回值,這類型的漏洞其實很好理解,在前面講 Reentrancy 實例的時候其實也涉及到了底層調用返回值處理驗證的問題。上篇已經總結過幾個底層調用函數的返回值和異常處理情況,這裡再回顧一下 3 個底層調用 call(), delegatecall(), callcode() 和 3 個轉幣函數 call.value()(), send(), transfer()

– call()

call() 用於 Solidity 進行外部調用,例如調用外部合約函數 <address>.call(bytes4(keccak("somefunc(params)"), params)),外部調用 call() 返回一個 bool 值來表明外部調用成功與否:


转载请注明:IAMCOOL » 以太坊智能合約安全入門了解一下(下)

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x