← C#

LESSON / ARTICLE

安全な入力処理の基礎

外部入力を信頼せず、型・範囲・長さを検証する基本を学びます。

外部入力を信頼しない

ユーザー入力、ファイル、ネットワーク、環境変数など、プログラムの外から届く値は想定どおりとは限りません。値を利用する前に、用途に応じて検証します。

型と範囲を分けて確認する

using System;

class Program
{
    static void Main()
    {
        string? input = Console.ReadLine();

        if (int.TryParse(input, out int quantity) &&
            quantity >= 1 &&
            quantity <= 100)
        {
            Console.WriteLine("受付可能です。");
        }
        else
        {
            Console.WriteLine("1から100までの整数を入力してください。");
        }
    }
}

TryParseで整数に変換できることと、数量として許可できる範囲にあることは別々に確認しています。

入力検証の観点

  • 型:整数、日付など、必要な型に変換できるか。
  • 範囲:最小値・最大値の範囲内か。
  • 長さ:文字列やデータサイズが上限を超えていないか。
  • 形式:アプリケーションが受け付ける形式か。
  • 文脈:その操作で使ってよい値か。

検証に失敗したら

不正な値を既定値として黙って処理すると、利用者が誤りに気付けないことがあります。安全に処理を中止するか、再入力を促すなど、仕様に沿った動作を選びます。

セキュリティの基本原則

入力検証は重要ですが、それだけですべての脆弱性を防げるわけではありません。データベース、ファイル、HTMLなど、値を使う先に応じた安全なAPIや出力処理も必要です。これらはExpert以降で詳しく扱います。