Solidity常見的安全問題具體如下:
1、外部呼叫未檢查。
在2018年Solidity十大安全問題榜單上未檢查的外部呼叫是第三個常見問題。目前前兩個都已經解決了,因此未檢查的外部呼叫成為了2020年更新列表中最常見的問題。
Solidity 底層呼叫方法,(例如 ())不會丟擲異常。而是在遇到錯誤,返回 false。
如果使用合約呼叫 mething()時,如果 doSomething()丟擲異常,則異常會繼續“冒泡”傳播。
2、高成本迴圈。
高成本迴圈從Solidity安全榜單的第四名上升到了第二名。受該問題影響的智慧合約數量增長大約30%。
使用者都知道,以太坊上的運算是需要付費的。因此,減少完成操作所需的計算,不僅僅是優化問題(效率),還涉及到成本費用。
3、權力過大的所有者。
這是Soldiity十大安全問題新出現的問題,該問題影響了約大概16%的合約,某些合約與其所有者(Owner)緊密相關,某些函式只能由所有者地址呼叫。
4、算術精度問題。
由於使用 256 位虛擬機器(EVM),Solidity 的資料型別有些複雜。 Solidity 不提供浮點運算, 並且少於 32 個位元組的資料型別將被打包到同一個 32 位元組的槽位中。
5、依賴 in。
智慧合約不應該依賴於 in 進行身份驗證,因為惡意的合約可能會進行中間人攻擊,然後耗盡所有資金,建議改用 er。
6、溢位(Overflow / Underflow)。
Solidity 的 256 位虛擬機器存在上溢位和下溢位問題。在for迴圈條件中使用uint資料型別時,開發人員務必要小心,因為它可能導致無限迴圈。
7、不安全的型別推導。
該問題在 Solidity 十大安全問題排行榜中也上升了兩位,現在影響到的智慧合約比之前超了17%以上。
Solidity 支援型別推導,但有一些奇怪的表現。例如,字面量0會被推斷為byte型別,而不是通常期望的整型。
8、不正確的轉賬。
此問題在 Solidity 十大安全問題榜單中從第六位下降到了第八位,目前影響不到1%的智慧合約。
在合約之間進行以太幣轉賬有多種方法。雖然官方推薦使用 sfer(x) 函式,但我們仍然找到了還在使用 send()函式的智慧合約。
9、迴圈內轉帳。
當在迴圈體中進行以太幣轉賬時,如果其中一個轉賬失敗(例如,一個合約不能接收),那麼整個交易將被回滾。
10、時間戳依賴。
在 2018 年,時間戳依賴問題排名第五,重要的是要記住,智慧合約在不同時刻多個節點上執行的。以太坊虛擬機器(EVM)不提供時鐘時間,並且通常用於獲取時間戳的 now 變數(stamp 的別名)實際上是礦工可以操縱的環境變數。