サニタイジング
読み:サニタイジング
外語:sanitizing
無害化すること。
目次
概要
特徴
HTML
SQL
OSコマンド
対策と注意点
実施場所
タイミングの重要性
実装の考え方
支援機能
概要
HTML
、
SQL
、
C
などの
printf
/
sprintf
構文、OSコマンドなどで使われる記号(特殊文字)をエスケープしたり、そのような値があるときにはプログラムを停止させたりすること。
サニタイジングされるべき文字は利用されるOSやシステム、処理系により異なる。
特徴
サニタイジングされるべき文字の例と、意味、どのようにエスケープするかを示す。
なお、ここで挙げる例は一例であり、下記の文字だけを処理すればいいというわけではない。
HTML
< ‐ タグ開始記号 ‐ <
> ‐ タグ終了記号 ‐ >
& ‐ 文字参照開始記号 ‐ &
" ‐ タグ内の属性の値を囲むのに利用 ‐ "
' ‐ タグ内の属性の値を囲むのに利用 ‐ '
SQL
' ‐ 値を囲むのに利用 ‐ ''
% ‐ LIKE構文で利用 ‐ ESACPE構文を利用
_ ‐ LIKE構文で利用 ‐ ESACPE構文を利用
OSコマンド
; ‐ コマンドの連結に利用(UNIX) ‐ 排除
. ‐ 自/親ディレクトリを表わす ‐ 排除
/ ‐ ディレクトリ区切り記号(UNIX) ‐ 排除
\ ‐ ディレクトリ区切り記号(Windows) ‐ 排除
<>+ ‐ リダイレクト記号 ‐ 排除
| ‐ パイプ記号 ‐ 排除
NUL
文字 ‐ 多くの場合、NUL文字でコマンド文字列の構文解釈が中断される ‐ 排除
対策と注意点
実施場所
Webプログラミングにおいては、HTMLに埋め込まれた
JavaScript
等の
スクリプト言語
でサニタイジングしても
セキュリティ
的に意味がない。
クラッカー
や攻撃プログラムは、攻撃用コードをWebブラウザーを介さず、直接サーバーに送る。
スクリプトでは
ユーザー
への便宜のための入力値チェックに留め、必ずCGIプログラムの内部でサニタイジングを行なうようにする。
タイミングの重要性
サニタイジングは、実行する直前、出力する直前に行なうのが基本である。
ただし、データの流れがはっきりと分かっている場合や、規格がはっきりと定まっているデータは、外部から取り込んだ直後にサニタイジングを行なっても差し支えはないといえる。
いずれにせよ、プログラムにおけるデータの流れや利用形態をはっきり認識しないと、プログラムは混乱に陥るので注意が必要である。
実装の考え方
サニタイジングを行なうにあたって、
通してはいけない
文字を一つ一つ指定してサニタイジングを行なうと、プログラミングが膨大になったり、処理すべき文字を処理し忘れるという問題を生み出す可能性がある。
プログラミングを楽にし、セキュリティを向上させるには、
通してもよい
文字を指定し、それ以外はすべてサニタイジングするという処理にしなければならない。
支援機能
一部の
インタープリター
言語(
Perl
等)では、サニタイジングを行なっていない外部からの値が展開された場合に処理を
強制終了
させる機能(Taintモード)を持っており、その機能を使うことでセキュリティの向上に役立つことがある。
ただし、サニタイジングの内容が十分であるかどうかについては検出できない。過度の信頼は禁物である。
再検索