入力バリデーション・サニタイズ・エスケープの違い|混同しやすい3つの処理を整理

「入力チェック」とひとことで言っても、実務ではバリデーションサニタイズエスケープという、役割の異なる3つの処理が登場します。

この3つは名前も似ていて、解説記事によって使われ方も微妙に違うため、混同されがちです。ここでは、それぞれが「何をする処理か」「いつ使うべきか」を、実際の入力値がどう変化していくかを見ながら整理します。

関連

それぞれの詳しい対策方法は SQLインジェクションとは?仕組みと対策XSS(クロスサイトスクリプティング)対策の基本 で解説しています。全体像は Webアプリの脆弱性・セキュリティ対策まとめ をご覧ください。

3つの処理が担う役割

処理 何をするか いつ行うか 代表的な対策
バリデーション 入力値が「形式として正しいか」をチェックする 入力を受け取った直後 不正な形式の入力を拒否する
サニタイズ 危険な要素(タグ・スクリプトなど)を取り除く、または無害な形に変換する データを保存する前後 リッチテキストの許可タグ制限など
エスケープ 特殊文字を「意味を持たない表現」に変換する データを画面やSQL文へ出力する直前 XSS対策・SQLインジェクション対策

ポイントは、バリデーションは「入り口」、サニタイズは「保存前後の無害化」、エスケープは「出口」で行う処理だということです。それぞれ担当する場所が違うため、どれか1つをやれば済むというものではありません。

体験|3段階の処理を1つずつ見る

実際に入力しながら、1つの値が3つの処理をどう通過していくかを確認してみましょう。

体験デモ|3段階の処理を1つずつ見る

バリデーションサニタイズエスケープ

1つの入力値が、3つの処理をどう通過していくかをその場で確認できます。

①バリデーション(形式チェック) ✅ OK
②サニタイズ(危険な部分を除去) ✅ OK
③エスケープ(表示時に無害化) ✅ OK
実際の画面表示イメージ

「不正な形式(記号のみ)」を試すと、①のバリデーションで止まり、後続の処理は実行されないままになったはずです。「HTMLタグ入り」を試すと、②のサニタイズでタグが取り除かれ、③のエスケープでさらに残りの記号が無害化されて画面表示イメージに反映されます。このように、入力値は段階を追って少しずつ安全な状態に変換されていきます。

入力バリデーションとは

入力バリデーションは、「メールアドレスの形式になっているか」「必須項目が空欄でないか」「文字数が範囲内か」といった、形式面のチェックです。

セキュリティ対策というより、まずはデータの品質を保つための処理という側面が強いですが、明らかに不正な形式の入力を早い段階で弾くことで、後続の処理に渡るデータの種類を絞り込める効果もあります。

注意したいのは、クライアント側(JavaScript)のバリデーションだけに頼らないことです。ブラウザの開発者ツールやAPIへの直接リクエストで、クライアント側のチェックは簡単に迂回できます。必ずサーバー側でも同じチェックを行う必要があります。

サニタイズとは

サニタイズは、入力値の中から危険な要素を取り除く、または安全な形に変換する処理です。

代表的なのは、リッチテキストエディタのように「一部のHTMLタグ(太字や改行など)だけは許可したい」場面です。この場合、単純にエスケープしてしまうとタグがすべて文字として表示され、意図した装飾が失われてしまいます。そこで、許可するタグだけを残し、<script>のような危険なタグを取り除く、というサニタイズ処理が必要になります。

実装には、自前でタグを正規表現などで取り除くのではなく、実績のあるサニタイズ用ライブラリを使うことを強く推奨します。HTMLの構文は例外パターンが非常に多く、自作の除去ロジックはすり抜けを生みやすいためです。

出力エスケープとは

出力エスケープは、データを画面(HTML)やSQL文などへ出力する直前に行う処理です。

「タグを取り除く」のではなく、「タグとして解釈させない」のがエスケープの考え方です。<&lt;に変換するように、特殊文字の見た目を保ったまま、意味だけを無効化します。

単にテキストとして表示したいだけであれば、サニタイズは不要でエスケープだけで十分なケースがほとんどです。多くのテンプレートエンジンでは、この処理がデフォルトで自動的に行われます。

まとめ|どれを、どこで使うか

3つの処理は役割も実施タイミングも異なるため、どれか1つで済ませようとせず、それぞれの場所で正しく組み合わせることが、安全なWebアプリの基本になります。

顧問契約、開発、プロジェクトのご依頼を承ります。
内容、期間により金額が変動しますのでお気軽にお問い合わせください。

※ 案件によりお受けできない場合もあります。

お問い合わせはこちら →
戻る