【えすけーぷしょり】

エスケープ処理 とは?

最終更新:
💡 特別な記号を、使う場所に合った文字表現へ

特別な意味を持つ文字を、使う場所に合った表現へ変換して文字として扱う処理。HTMLの文字表示を例に、文脈による違いと、SQLのパラメーター化やHTMLのサニタイズとの役割の違いを説明します。

📌 このページのポイント
エスケープ:記号を文字として表示HTML本文で「小なり記号」を表示したい入力の文字<HTML表現&lt;文字参照画面の文字<変換方法は、使う場所に合わせるHTML・JavaScript・URLでは違うSQLでは、構文と値を分けて渡そう
HTML本文での文字表示の例。図の中央はHTMLソース中の表現です。SQLのパラメーター化やHTMLのサニタイズとは役割を区別します。
ひよこ ひよこ
エスケープ処理は、何を変えるの?
ペンギン先生 ペンギン先生
文字が構文として解釈されないよう、使う場所に合った表現へ変えるよ。例えばHTMLの本文で「小なり記号」をそのまま表示したいなら、HTMLソースでは文字参照にする。ブラウザはタグの始まりではなく、文字として表示するんだ。
ひよこ ひよこ
一度変換すれば、どこでも安全?
ペンギン先生 ペンギン先生
HTMLの本文、属性、JavaScript、URLでは、解釈のされ方が違うよ。ある場所向けの変換を別の場所に使っても十分とは限らない。フレームワークの自動エスケープも、保護してくれる範囲を確かめよう。
ひよこ ひよこ
太字などのHTMLを残したい場合は?
ペンギン先生 ペンギン先生
全部を文字として表示するのではなく、許可するHTMLを選ぶサニタイズが必要になるよ。例えばReactのdangerouslySetInnerHTMLのようにHTMLを直接入れる機能は、通常の文字表示の保護を迂回する。信頼できないHTMLをそのまま渡さないようにするんだ。
ひよこ ひよこ
SQLの文字も、手作業で変えればいい?
ペンギン先生 ペンギン先生
SQLインジェクション対策では、入力文字の置き換えだけに頼らないでね。パラメーター化クエリでSQLの構造と値を分けて渡すのが基本。ORMでも生のSQLを組み立てる機能などは確認が必要なので、「使っているだけで全て安全」とは考えないようにしよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「エスケープ処理」って出てきたら「特別な記号を、使う場所に合った文字表現へ変える処理」と思えばだいたいOK!
📖 おまけ:英語の意味
「Escape」 = 特殊な意味から逃がす
💬 構文で特別な働きをする文字を、データとして扱える表現にするイメージです。どんな場所でも同じ変換でよい、という意味ではありません。

参考資料

← 用語集にもどる