【さにたいず】

サニタイズ とは?

💡 入力データの「消毒」、危険な文字列を無害化してセキュリティ攻撃を防ぐ
📌 このページのポイント
サニタイズ — 入力データの無害化 ユーザー入力 <script>alert() '; DROP TABLE-- サニタイズ処理 HTMLエスケープ SQLパラメータ化 タグ除去・置換 安全な出力 &lt;script&gt;... パラメータ化済み サニタイズで防げる攻撃 XSS 悪意あるスクリプトを ページに埋め込む攻撃 SQLインジェクション 不正なSQLを 入力欄から実行する攻撃 コマンドインジェクション OSコマンドを 不正に実行する攻撃
サニタイズ(入力無害化)のイメージ
ひよこ ひよこ

サニタイズって具体的に何をするの?

ペンギン先生 ペンギン先生

例えばWebフォームに「<script>alert('hack')</script>」と入力されたとき、そのままHTMLに出力するとXSS攻撃になる。サニタイズで「<」を「&lt;」に変換して無害化することで、スクリプトが実行されなくなる。

ひよこ ひよこ

SQLインジェクションにも関係があるの?

ペンギン先生 ペンギン先生

あるよ。SQLに「'; DROP TABLE users; --」のような文字列が混入されると、データベースが破壊される。SQLのサニタイズではシングルクォートをエスケープするが、より確実なのはプリペアドステートメントバインド変数)を使うこと。

ひよこ ひよこ

サニタイズだけしておけば安全?

ペンギン先生 ペンギン先生

サニタイズは必要だけど十分ではない。見落としがあると攻撃される。SQLならプリペアドステートメントHTMLならテンプレートエンジンの自動エスケープを使うのが本質的な対策。「サニタイズを頑張る」より「危険な入力が混入しても安全な設計」が重要。

ひよこ ひよこ

サニタイズとバリデーションは違うの?

ペンギン先生 ペンギン先生

違うよ。バリデーションは「入力が正しい形式かチェックする(不正なら拒否する)」こと。サニタイズは「入力を安全な形に変換する(不正な部分を除去・無害化する)」こと。理想は両方やることで、バリデーションで不正な入力を弾き、通過したものをさらにサニタイズして安全にするのが多層防御の考え方だよ。

ひよこ ひよこ

フレームワークを使っていれば自分でサニタイズしなくてもいいの?

ペンギン先生 ペンギン先生

モダンなフレームワークはかなり自動でやってくれるよ。ReactはJSXに埋め込んだ文字列を自動エスケープするし、Railsもビューの出力をデフォルトでエスケープする。ただしdangerouslySetInnerHTMLやraw指定で自動エスケープをバイパスした瞬間に脆弱性が生まれるから、「なぜバイパスが必要か」を常に意識することが大事だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
サニタイズって出てきたら「入力データの危険な文字・コードを無害化してセキュリティ攻撃を防ぐ処理」と思えばOK!
📖 おまけ:英語の意味
「Sanitize」 = 消毒する・清潔にする
💬 医療用語の「消毒・滅菌」から転用。汚染されたデータを「きれいにする」というメタファー
← 用語集にもどる