---
title: "入力値検証とは？不正な入力を防ぐ基本対策【SG試験】"
description: "入力値検証は、利用者や外部システムから受け取ったデータが想定どおりかを確認する基本対策です。SG試験でエスケープ処理、サニタイジング、認証との違いを切り分ける判断基準を整理します。"
last_modified_at: "2026-07-09"
canonical_url: "https://stemtazoo.github.io/sg/input-validation/"
section: "sg"
---

## まず結論

入力値検証とは、**利用者や外部システムから受け取ったデータが、想定した形式・長さ・範囲に収まっているかを確認する対策**です。  
SG試験では、SQLインジェクション、クロスサイトスクリプティング、バッファーオーバーフローなどを防ぐための基本的な考え方として問われます。

選択肢では、「入力された文字列をそのまま処理する」「長さや形式を確認しない」といった記述があれば注意です。  
入力値検証は、**外から来たデータを信用せず、使う前に確認する**ための対策です。

## 直感的な説明

入力値検証は、受付で「この書類は必要な形式になっていますか？」と確認するようなものです。

たとえば、電話番号の欄に名前が入っていたり、年齢の欄にマイナスの数字が入っていたり、郵便番号の欄に長すぎる文字列が入っていたりすると、後続の処理で問題が起きるかもしれません。

Webアプリでも同じです。  
入力欄に、本来想定していない記号、長すぎる文字列、SQL文の一部、不正なスクリプトなどが入ると、脆弱性につながることがあります。

そのため、入力値検証では、**受け取ってよいデータかどうかを先に確認する**ことが大切です。

## 定義・仕組み

入力値検証では、アプリケーションが受け取った値に対して、あらかじめ決めたルールに合っているかを確認します。

代表的な確認項目は次のとおりです。

- 必須項目が入力されているか
- 文字数が上限を超えていないか
- 数値の範囲が正しいか
- メールアドレスや日付などの形式が正しいか
- 許可していない記号や制御文字が含まれていないか
- ファイル形式やファイルサイズが想定どおりか

基本の流れは次のように考えます。

1. 入力として受け取る値を決める
2. 許可する形式・長さ・範囲を決める
3. 入力値がルールに合っているか確認する
4. 不正な値は処理せず、エラーとして扱う
5. 正常な値だけを後続処理に渡す

特に重要なのは、**禁止する値を後から探すより、許可する値を決める**という考え方です。  
たとえば、「数字だけ許可」「英数字だけ許可」「選択肢にある値だけ許可」のように、受け取ってよい値を絞ると安全性が高くなります。

IPAの「安全なウェブサイトの作り方」では、SQLインジェクション対策としてSQL文の組立てにプレースホルダを使うことや、クロスサイトスクリプティング対策として出力時のエスケープ処理を行うことなどが示されています。入力値検証は、これらの対策とあわせて考える基本対策です。  
参考：[IPA 安全なウェブサイトの作り方](https://www.ipa.go.jp/security/vuln/websecurity/)

SG試験では、入力値検証だけで全ての攻撃を防げると考えず、**入力時の確認、処理時の安全な実装、出力時のエスケープを組み合わせる**と押さえるとよいです。

## どんな場面で使う？

入力値検証は、外部からデータを受け取るほぼすべての場面で使います。

たとえば、次のような場面です。

- Webフォームの入力欄
- ログイン画面
- 検索フォーム
- ファイルアップロード機能
- APIで受け取るリクエスト
- 外部システムから連携されるデータ

業務では、「社内システムだから安全」「ログイン後の利用者だから安全」と考えないことが大切です。  
入力元が利用者でも、外部システムでも、ファイルでも、**アプリケーションに入ってくるデータは検証する**という考え方が基本です。

選択肢では、次の表現があれば入力値検証を疑います。

- 入力データの形式を確認する
- 入力文字数の上限を確認する
- 許可された文字だけを受け付ける
- 数値の範囲を確認する
- 不正な入力を処理対象から除外する

一方で、「画面に表示するときに特殊文字を変換する」とあればエスケープ処理、「本人であることを確認する」とあれば認証、「権限があるか確認する」とあれば認可を考えます。

## よくある誤解・混同

### エスケープ処理との違い

エスケープ処理は、**特別な意味を持つ文字を、別の安全な表現に変換する処理**です。

たとえば、HTMLでは「<」や「>」がタグとして解釈されることがあります。  
そのため、画面に表示するときには、これらを安全な文字表現に変換します。

- 入力値検証：入力された値がルールに合っているか確認する
- エスケープ処理：出力や処理の場面で危険な意味を持たないように変換する

SG試験では、「入力時に形式や長さを確認する」なら入力値検証、「表示時に特殊文字を変換する」ならエスケープ処理と切り分けます。

### サニタイジングとの違い

サニタイジングは、一般に**危険な文字や不要な文字を取り除いたり無害化したりする処理**として使われます。

ただし、試験では用語の細かい定義よりも、何をしているかを見ます。

- ルールに合わない入力を拒否する：入力値検証
- 危険な文字を取り除く・無害化する：サニタイジング
- 出力先に合わせて特殊文字を変換する：エスケープ処理

「入力を受け付けるかどうかの確認」なのか、「値を変換して使う」のかで判断しましょう。

### 認証・認可との違い

認証は、**利用者が本人かを確認すること**です。  
認可は、**その利用者に操作権限があるかを確認すること**です。

入力値検証は、利用者そのものではなく、**入力されたデータの中身**を確認します。

- 認証：あなたは誰ですか
- 認可：その操作をしてよいですか
- 入力値検証：そのデータは正しい形式ですか

SG試験では、「本人確認」「権限確認」「データの形式確認」を分けて読むと、選択肢を切りやすくなります。

### 入力値検証だけで十分という誤解

入力値検証は重要ですが、それだけでSQLインジェクションやXSSを完全に防げるとは限りません。

たとえば、SQLインジェクション対策では、入力値を確認するだけでなく、プレースホルダを使ってSQL文を安全に組み立てることが重要です。  
XSS対策では、入力値を確認するだけでなく、画面に出力するときのエスケープ処理が重要です。

つまり、入力値検証は基本対策ですが、**攻撃の種類に応じた専用の対策と組み合わせる**必要があります。

## まとめ（試験直前用）

- 入力値検証は、受け取ったデータの形式・長さ・範囲を確認する対策
- 「外から来たデータをそのまま信用しない」が基本
- 入力時に確認するなら入力値検証
- 表示時に特殊文字を変換するならエスケープ処理
- 本人確認は認証、権限確認は認可
