「サニタイジング」「エスケープ処理」「バリデーション」の違い

「サニタイジング」「エスケープ処理」「バリデーション」は混同されやすい言葉ですが、それぞれ異なる意味を持ちます。

エスケープ処理

特別な意味を持つ記号を変換する処理

エスケープ処理は特別な意味を持つ記号を、その記号とは別の表現を使って出力することを指します。

例えば SQL では「’(シングルクオート)」は特別な意味を持つので、「”(シングルクオート2つ)」にすることで意図しない動きをしない(させない)ようにエスケープできます。

また html では「<>」はタグを意味するので、「<hoge>」を画面に表示しようと思ってもタグとして認識され表示されません。

「<」を「&lt;」、「>」を「&gt;」に置き換えることで画面表示上は「<hoge>」を表現できます。

PHP の htmlspecialchars 関数など、自動的にエスケープ処理を行う組み込み関数が用意されているのが一般的です。

バリデーション

入力されたデータの妥当性確認

例えば「氏名欄は32文字まで」や「身長欄は100.0~250.0の数字のみ」といった、入力パラメータ毎の妥当性を評価することをバリデーションといいます。

妥当性は人間が決めるもので、既存の関数と正規表現で実現できるため、エスケープ処理のような専用の組み込み関数は基本的に存在しません。

バリデーションが楽になる仕組みは存在する

PHPのフレームワークであるlaravelには「ValidatesRequests」という仕組みがあり、”email”などの事前定義されたルールに基づいて簡単にバリデーションを実現することができます。

サニタイジング

特別な意味を持つ記号を「無害化」する行為

サニタイジングは「無害化」と訳されることが多いです。直訳すると「消毒」になります。

記号の無害化なので、エスケープ処理はサニタイジングの1つと言えます。

サニタイジングはエスケープ処理より広い言葉なので、そもそも「記号を削除してしまう」というのもサニタイジングの1つです。

削除してしまうというサニタイジング方法はあまり採られないと思われますが、例えばSQLのサニタイジングは主にエスケープ処理とプリペアドステートメントの2つの方法があるので、「サニタイジング済み」と表現するとどちらの方法なのかまでは判断できません。

このような曖昧さから「サニタイジングという言葉は使うな!」という意見もあるようですが、ITに明るくない人間へ説明する場合は「サニタイジング(無害化)が重要」というざっくりした説明に使いやすい言葉だと思います。

逆にそれ以外だと使ってはいけないというのも納得ですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)