作者: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 » 以太坊智能合約安全入門了解一下(下)