Re Reference AI

技術

入力サニタイズ(入力検証)とは

Input Sanitization / 入力検証

アプリケーションが受け取るユーザー入力やデータを処理前に検証・無害化し、インジェクション攻撃など不正な入力による被害を防ぐ手法

セキュリティ

ひとことで言うと

ユーザーが入力したデータをそのまま使わず、危険な文字列や不正な形式を取り除いたり変換したりしてから処理する、セキュリティの基本対策。

概要

入力サニタイズは、アプリケーションが外部から受け取るユーザー入力やデータを処理する前に検証する手法。SQLインジェクションやクロスサイトスクリプティング(XSS)、コマンドインジェクションなどの原因となりうる不正な文字列や形式を除去・変換する。想定するスキーマや形式に合致しないデータを拒否する入力検証(validation)と、特殊文字のエスケープや除去によってデータを無害化する処理を合わせて指すことが多い。Webアプリケーションのセキュリティにおける基本的な防御層として、OWASPのガイドラインなどでも標準的な対策として位置づけられている。LLMを組み込んだアプリケーションにおいては、ユーザー入力や外部データの中に紛れ込んだプロンプトインジェクションの試みを検知・除去する目的でも、同様の考え方が応用されている。

背景

アプリケーションが外部からの入力を無条件に信頼して処理すると、入力の中に埋め込まれた不正なコードやコマンドがそのまま実行されてしまう、インジェクション系の脆弱性につながりやすい。この種の脆弱性は古くからWebアプリケーションセキュリティの中心的な課題として扱われており、入力サニタイズはその基本的な対策として広く実践されてきた。

アーキテクチャ

入力サニタイズは、アプリケーションの入力受付部分に検証・無害化のロジックを組み込む形で実装される。検証段階では、期待するデータ型・長さ・文字種などのスキーマに合致しない入力を拒否し、無害化段階では、HTML特殊文字のエスケープやSQL文の構文として解釈されうる記号の除去、許可リスト(allowlist)に基づくフィルタリングなどを行う。処理後のデータのみが後続のロジック(データベースクエリの構築、HTML出力、外部コマンドの実行など)へ渡される。

ワークフロー

アプリケーションが外部からの入力を受け取る。 入力が期待するスキーマ・形式に合致するか検証する。 合致しない場合は入力を拒否し、合致する場合は不正な文字列や記号をエスケープ・除去して無害化する。 無害化された入力のみを後続の処理(クエリ構築、出力、コマンド実行など)へ渡す。

欠点

  • サニタイズのルールが不十分だと、想定していない形式の攻撃文字列をすり抜けてしまう場合がある
  • 過度に厳格なサニタイズは、正規のデータ(記号を含む名前や数式など)まで拒否・破損させてしまうことがある
  • 出力先の文脈(SQL、HTML、シェルコマンドなど)ごとにエスケープ・無害化の方法が異なり、一律の対策では不十分になりやすい

比較

  • プロンプトインジェクション入力サニタイズは、Webアプリケーション全般で使われてきたインジェクション対策の考え方であり、LLM特有のプロンプトインジェクションに対しても、入力の検証・無害化という同様のアプローチが応用される
  • 出力フィルタリング入力サニタイズは処理前の入力を検証・無害化する対策であり、出力フィルタリングは処理後の出力を検査する対策という、対の関係にある

関連用語

プロンプトインジェクション出力フィルタリングガードレール

よくある質問

入力サニタイズと入力検証は同じ?

入力検証は期待する形式に合致しない入力を拒否する処理を指し、入力サニタイズはそれに加えて不正な文字列のエスケープや除去による無害化も含む、より広い意味で使われることが多い。

LLMのプロンプトインジェクション対策として入力サニタイズは有効?

外部データの中の明らかな攻撃パターンを検知・除去する対策として一定の効果はあるが、LLMは入力の由来を構造的に区別できないため、入力サニタイズだけでは防ぎきれない場合がある。

参考文献