Solidity常見的安全問題有哪些?
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 的別名)實際上是礦工可以操縱的環境變量。