skka3134

skka3134

email
telegram

智能合約安全:4.整數溢出

什麼是整數溢出?

Solidity 中的整數默認為 256 位。在進行加法運算時,如果結果超過 256 位,就會出現溢出。這會導致意料之外的結果,被黑客利用。

例如,用戶 A 將 10 個 token 存入合約,合約計算 token 餘額時使用一個無校驗的 uint256 變量 balance。然後黑客傳入一個極大的值,導致運算溢出,balance 再次從 0 開始計算,黑客可以無限提取 token。

防止整數溢出的方法:

使用安全的數學庫,避免直接調用易溢出的運算。如 Safemath
對關鍵變量採用溢出檢測,在變更前檢查新值是否合法。
避免循環調用易溢出的函數。限制用戶調用次數。

代碼示例:

// 不好的寫法
uint256 balance;

function add(uint256 value) external {
  balance += value; 
}

// 好的寫法
using SafeMath for uint256;

uint256 balance;

function add(uint256 value) external {
  balance = balance.add(value);
  require(balance >= value, "Overflow detected");
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。