「サニタイズ」と「エスケープ」の違い!わかりやすく解説!

Webアプリを開発しているとよく耳にする言葉に、「サニタイズ(sanitize)」と「エスケープ(escape)」があります。

どちらもセキュリティ対策に欠かせない重要な処理ですが、「何が違うのか」をご存じでしょうか?

「サニタイズ」と「エスケープ」は似ているようで役割が異なります。簡単に言うと、以下の違いがあります。

  • サニタイズ:データを安全にするための総称
    • 入力値の「エスケープ・削除・置換・正規化・検証」などを含みます。
  • エスケープ:サニタイズの中の一種
    • 特別な意味を持つ文字を無害化(安全な文字列に変換)する処理です。

この記事では、サニタイズ」と「エスケープ」の違いをわかりやすく説明します。

サニタイズとは?

サニタイズ(sanitize)とは、外部から受け取ったデータ(ユーザー入力など)を安全な形に整える処理のことです。悪意のある文字列や不正な構文を無害化(無効化)する目的で行われます。

たとえば、フォーム入力やURLパラメータに意図しないコードが含まれていると、それをそのまま出力した場合にXSS(クロスサイトスクリプティング)攻撃につながる恐れがあります。

サニタイズでは、こうしたリスクを防ぐために、入力データを安全な形式に整えます。サニタイズには次のような処理が含まれます。

処理の種類内容
エスケープ
(escape)
特別な意味を持つ文字を安全な文字列に変換する<&lt;>&gt;
削除
(remove)
危険な文字列やタグを削除する<script>タグを削除
置換
(replace)
特定の文字を別の文字に置き換える改行コードや制御文字を別の形式に変換
正規化
(normalize)
文字コードや形式を統一する全角・半角の混在を統一するなど
検証
(validation)
入力値が想定された形式や範囲内かを確認する数値のみ・メール形式かどうかをチェック

サニタイズ処理を行うことをサニタイジングと呼びます。

あわせて読みたい

サニタイズ』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

エスケープとは?

エスケープ(escape)は、サニタイズの中でも特に「特別な意味を持つ文字を安全な文字列に変換する処理」を指します。主にHTML・JavaScript・SQLなどの出力時に使われます。

たとえば、HTMLでは<>はタグとして解釈されるため、ユーザーが入力した値をそのまま出力すると危険です。例えば、次のようなデータが入力フォームに入力されたとしましょう。

こんにちは!<script>alert('あなたのデータは危険です!');</script>

このデータをサニタイズせずに画面に表示すると、<script>タグが実行されてしまいます。そこで、エスケープ処理を行い次のように変換します。

こんにちは!&lt;script>alert('あなたのデータは危険です!');&lt;/script&gt;

こうすることで、ブラウザはタグを単なる文字列として表示し、スクリプトが実行されなくなります。このように、エスケープは「危険な文字を安全に変換する具体的な手法」なのです。

あわせて読みたい

エスケープ』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

「サニタイズ」と「エスケープ」の違い

サニタイズ」と「エスケープ」の違いをわかりやすくまとめると、次のようになります。

比較項目サニタイズエスケープ
意味不正なデータを安全な形式に整える、全体的な処理特殊文字を無害化する処理
範囲エスケープ・削除・置換・正規化・検証などを含む広い概念サニタイズの一部(部分的な手法)
目的入力データ全体を安全に保つ特殊文字が意図しない動作を起こさないようにする
<script>タグを削除、数値入力の形式をチェック<&lt;'&#39;

本記事のまとめ

この記事では、サニタイズ」と「エスケープ」の違いについて解説しました。

サニタイズは「データを安全に整えるための総称」でありサニタイズの中のひとつの手段としてエスケープがあります。

お読みいただきありがとうございました。

スポンサーリンク