skka3134

skka3134

email
telegram

智能契約のセキュリティ:4.整数オーバーフロー

整数オーバーフローとは何ですか?

Solidity では、整数はデフォルトで 256 ビットです。加算演算を行う際に、結果が 256 ビットを超えるとオーバーフローが発生します。これにより予期しない結果が生じ、ハッカーに悪用される可能性があります。

例えば、ユーザー A が 10 個のトークンを契約に入金し、契約がトークンの残高を計算する際には、検証のない uint256 変数 balance を使用します。その後、ハッカーが非常に大きな値を入力することで演算がオーバーフローし、balance が再度 0 から計算され、ハッカーは無制限にトークンを引き出すことができます。

整数オーバーフローを防ぐ方法:

安全な数学ライブラリを使用し、オーバーフローの起こりやすい演算を直接呼び出さないようにする。例えば、Safemath を使用する。
重要な変数にオーバーフローチェックを導入し、変更前に新しい値が妥当かどうかを確認する。
オーバーフローの起こりやすい関数のループ呼び出しを避ける。ユーザーの呼び出し回数を制限する。

コード例:

// Bad
uint256 balance;

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

// Good
using SafeMath for uint256;

uint256 balance;

function add(uint256 value) external {
  balance = balance.add(value);
  require(balance >= value, "Overflow detected");
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。