📗
owasp-smart-contract-top-10-ja
  • OWASP Smart Contract Top 10 ja
  • OWASP スマートコントラクト Top 10 日本語版
    • リーダー
  • OWASP スマートコントラクト Top 10 2025 日本語版
    • OWASP スマートコントラクト Top 10 2025
    • SC01:2025 - 不適切なアクセス制御 (Improper Access Control)
    • SC02:2025 - 価格オラクル操作 (Price Oracle Manipulation)
    • SC03:2025 - ロジックエラー (Logic Errors)
    • SC04:2025 - 入力バリデーションの欠如 (Lack of Input Validation)
    • SC05:2025 - 再入可能性 (Reentrancy)
    • SC06:2025 - チェックされていない外部呼び出し (Unchecked External Calls)
    • SC07:2025 - フラッシュローン攻撃 (Flash Loan Attacks)
    • SC08:2025 - 整数オーバーフローとアンダーフロー (Integer Overflow and Underflow)
    • SC09:2025 - 安全でないランダム性 (Insecure Randomness)
    • SC10:2025 - サービス拒否 (Denial Of Service)
  • OWASP スマートコントラクト Top 10 2023 日本語版
    • OWASP スマートコントラクト Top 10 2023
    • SC01:2023 - 再入攻撃 (Reentrancy Attacks)
    • SC02:2023 - 整数オーバーフローとアンダーフロー (Integer Overflow and Underflow)
    • SC03:2023 - タイムスタンプの依存性 (Timestamp Dependence)
    • SC04:2023 - アクセス制御の脆弱性 (Access Control Vulnerabilities)
    • SC05:2023 - フロントランニング攻撃 (Front-running Attacks)
    • SC06:2023 - サービス拒否攻撃 (Denial of Service (DoS) Attacks)
    • SC07:2023 - ロジックエラー (Logic Errors)
    • SC08:2023 - 安全でないランダム性 (Insecure Randomness)
    • SC09:2023 - ガス制限の脆弱性 (Gas Limit Vulnerabilities)
    • SC10:2023 - チェックされていない外部呼び出し (Unchecked External Calls)
Powered by GitBook
On this page
  • 説明:
  • 事例 (脆弱なコントラクト):
  • 影響:
  • 対策:
  • 事例 (修正バージョン):
  • 入力バリデーションの欠如の被害を受けたスマートコントラクトの事例:
  1. OWASP スマートコントラクト Top 10 2025 日本語版

SC04:2025 - 入力バリデーションの欠如 (Lack of Input Validation)

説明:

入力バリデーションはスマートコントラクトが有効で期待されるデータのみを処理することを確保します。コントラクトが受信した入力の検証を怠ると、ロジックの操作、不正アクセス、予期しない動作などのセキュリティリスクに不注意にさらされることになります。たとえば、コントラクトがユーザー入力を検証なしで常に有効であると想定している場合、攻撃者はこの信頼を悪用して悪意のあるデータを持ち込むことができます。この入力バリデーションの欠如はスマートコントラクトのセキュリティと信頼性を損ないます。

事例 (脆弱なコントラクト):

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Solidity_LackOfInputValidation {
    mapping(address => uint256) public balances;

    function setBalance(address user, uint256 amount) public {
        // The function allows anyone to set arbitrary balances for any user without validation.
        balances[user] = amount;
    }
}

影響:

  • 攻撃者は入力を操作して資金を流出したり、トークンを盗んだり、その他の金銭的損害を引き起こす可能性があります。

  • 不適切な入力によって状態変数が破損し、信頼できなく安全でないコントラクタの動作につながる可能性があります。

  • 攻撃者はコントラクトを悪用して不正な取引や操作を実行し、ユーザーとシステム全体に影響を及ぼす可能性があります。

対策:

  • 入力が期待したタイプに適合していることを確認します。

  • 入力が許容範囲内にあることを確認します。

  • 認可されたエンティティのみが特定の関数を呼び出せることを確認します。

  • アドレス形式や文字列長など、入力の構造を確認します。

  • 入力がバリデーションに失敗した場合には、常に実行を停止し、明確なエラーメッセージを表示します。

事例 (修正バージョン):

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract LackOfInputValidation {
    mapping(address => uint256) public balances;
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Caller is not authorized");
        _;
    }

    function setBalance(address user, uint256 amount) public onlyOwner {
        require(user != address(0), "Invalid address");
        balances[user] = amount;
    }
}

入力バリデーションの欠如の被害を受けたスマートコントラクトの事例:

PreviousSC03:2025 - ロジックエラー (Logic Errors)NextSC05:2025 - 再入可能性 (Reentrancy)

Last updated 4 months ago

: 包括的な

: 包括的な

Convergence Finance
ハック分析
Socket Gateway
ハック分析