【さにたいず】

サニタイズ とは?

最終更新:
💡 使う場所に合わせて、データを整える

データを利用目的に合う形へ整える処理。HTMLのサニタイズと出力エスケープ、入力検証、SQLのパラメーター化の違いを、初心者向けに解説します。

📌 このページのポイント
サニタイズ:使う場所に合う扱いを選ぶ文字として表示<b>こんにちは</b>出力先に合うエスケープHTMLの書式を残すこんにちはHTMLサニタイズSQLの値として使う命令 / 入力の値パラメーター化入力検証は、形式や値の条件を確認する別の役割HTMLは許可する要素・属性を選んで残す
表示や利用の目的で処理を使い分けます。HTMLサニタイズ、出力エスケープ、SQLのパラメーター化は別の処理で、入力検証だけでも代用できません。
ひよこ ひよこ
サニタイズは、危険な文字を全部消すこと?
ペンギン先生 ペンギン先生
使う目的に合わせてデータを整える処理だよ。たとえば、投稿の太字を残してHTMLとして表示したい場合、許可する要素や属性を選び、それ以外を取り除く。記号を一律に消せば、正しい文章や名前まで壊してしまうんだ。
ひよこ ひよこ
エスケープとは、何が違う?
ペンギン先生 ペンギン先生
出力エスケープは、文字がコードとして解釈されないよう、表示する場所に合う形で表すこと。HTMLサニタイズは、許可する書式を残しながらHTMLを扱う方法だよ。単なる文章として表示するのか、HTMLの書式を認めるのかで選ぶんだ。
ひよこ ひよこ
入力が正しいか調べるのも、サニタイズ?
ペンギン先生 ペンギン先生
それは入力検証だよ。年齢が数値か、指定した範囲か、日付として正しいかなどを調べる。検証を通った文章でも、HTMLへ出すときの扱いは別に考える。入力検証だけでXSSやSQLインジェクションを防げるわけではないんだ。
ひよこ ひよこ
SQLにも、サニタイズを使う?
ペンギン先生 ペンギン先生
SQLでは、問い合わせの命令と入力の値を分けるパラメーター化が基本になるよ。入力をSQL文字列へ直接つなぎ、引用符を自分で置き換える方法に頼らない。名前に引用符があっても、値として正しく扱える設計を選ぶんだ。
ひよこ ひよこ
HTMLは、どう整えればいい?
ペンギン先生 ペンギン先生
保守されているHTMLサニタイズ用ライブラリを使い、必要な要素や属性だけを認める。正規表現だけでHTMLの危険な部分を消そうとしない。フレームワークの自動エスケープを外す箇所では、何を表示するかと対策を確認しよう。
もっと詳しく知りたい人へ

一度サニタイズすれば、その後は自由に変更できる?

処理後に別のコードやライブラリがHTMLを変更すると、保護を崩す場合があります。最後に何が画面へ渡るかを確認し、サニタイズ用ライブラリ自体の更新も続けます。

同じエスケープを、すべての場所で使える?

HTML本文、属性、URL、JavaScriptなどで必要な扱いが異なります。どこへデータを入れるかに合う仕組みを選び、危険な出力先へ不用意に入力を埋め込みません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「サニタイズ」って出てきたら「データを使う目的に合わせて、危険な部分などを取り除き整える処理」と思えばだいたいOK!
📖 おまけ:英語の意味
「Sanitize」 = 清潔にする・無害化する
💬 データを整える処理の表現です。何を許可し、何を取り除くかは、HTMLなどの形式と利用目的によって変わります。

参考資料

← 用語集にもどる