サニタイジング 【sanitizing】 サニタイズ / sanitize / サニタイゼーション / sanitization
概要
サニタイジング(sanitizing)とは、利用者が入力した文字データを受け取る際に、プログラムにとって特別な意味を持つ可能性のある文字や文字列を検知して、一定の規則に従って別の表記に置き換えること。「無害化」とも呼ばれ、攻撃者が入力データ中にコード断片などを混入させて誤作動を誘発する攻撃などを防ぐために行われる。Webアプリケーションのセキュリティ対策としてよく用いられる手法で、HTMLタグやJavaScript、SQL文やそれらが使用する区切り記号などを検出して、同じ意味の別の表記に書き換えるエスケープ処理を行ったり、難しい場合は削除する。
例えば、閲覧者が投稿した内容を表示する電子掲示板(BBS)のようなシステムを開発する際に、入力された文字列をそのまま他の閲覧者に表示する仕様にすると、悪意のある閲覧者がHTMLのscriptタグなどで有害な動作をするスクリプトを書き入れ、それが他の閲覧者のWebブラウザに送られて実行されてしまう。
このような事態を防ぐため、入力文字列をチェックして、HTMLでタグとして解釈される角括弧「<」「>」など、システムにとって特殊な意味を持つ文字や記号をHTML実体参照表記に改めるといった置き換え処理を行う。
システムの種類や構成によって脅威となり得る表記や文字は異なるため、どのようなサニタイジング処理を行うかも異なってくる。データベースと連動したシステムでは、SQLインジェクションを防ぐためにSQL文中で意味のある引用符や条件式などを警戒すべきであるし、特定のプログラミング言語やスクリプト言語における表記や、OSコマンドやシェルスクリプトなどに気をつけるべきシステムもある。
なお、サニタイジングされて入力されたデータをプログラムで処理する際にエスケープ処理が解除されてしまう場合などもありえるため、データの無害化をサニタイジングのみに頼るのは危険とされ、Webページなどの場合は出力直前に一律に外部に由来するデータのエスケープなどを行うべきであるとされる。
(2018.7.23更新)