サニタイジング
読み:サニタイジング
外語:sanitizing

 無害化すること。
目次

概要
 HTMLSQLCなどのprintf/sprintf構文、OSコマンドなどで使われる記号(特殊文字)をエスケープしたり、そのような値があるときにはプログラムを停止させたりすること。
 サニタイジングされるべき文字は利用されるOSやシステム、処理系により異なる。

特徴
 サニタイジングされるべき文字の例と、意味、どのようにエスケープするかを示す。
 なお、ここで挙げる例は一例であり、下記の文字だけを処理すればいいというわけではない。

HTML

SQL

OSコマンド

対策と注意点

実施場所
 Webプログラミングにおいては、HTMLに埋め込まれたJavaScript等のスクリプト言語でサニタイジングしてもセキュリティ的に意味がない。クラッカーや攻撃プログラムは、攻撃用コードをWebブラウザーを介さず、直接サーバーに送る。
 スクリプトではユーザーへの便宜のための入力値チェックに留め、必ずCGIプログラムの内部でサニタイジングを行なうようにする。

タイミングの重要性
 サニタイジングは、実行する直前、出力する直前に行なうのが基本である。
 ただし、データの流れがはっきりと分かっている場合や、規格がはっきりと定まっているデータは、外部から取り込んだ直後にサニタイジングを行なっても差し支えはないといえる。
 いずれにせよ、プログラムにおけるデータの流れや利用形態をはっきり認識しないと、プログラムは混乱に陥るので注意が必要である。

実装の考え方
 サニタイジングを行なうにあたって、通してはいけない文字を一つ一つ指定してサニタイジングを行なうと、プログラミングが膨大になったり、処理すべき文字を処理し忘れるという問題を生み出す可能性がある。
 プログラミングを楽にし、セキュリティを向上させるには、通してもよい文字を指定し、それ以外はすべてサニタイジングするという処理にしなければならない。

支援機能
 一部のインタープリター言語(Perl等)では、サニタイジングを行なっていない外部からの値が展開された場合に処理を強制終了させる機能(Taintモード)を持っており、その機能を使うことでセキュリティの向上に役立つことがある。
 ただし、サニタイジングの内容が十分であるかどうかについては検出できない。過度の信頼は禁物である。

再検索