サニタイジング

読み:サニタイジング
外語:sanitizing 英語
品詞:さ変名詞

無害化すること。

目次

HTMLSQLCなどのprintf/sprintf構文、OSコマンドなどで使われる記号(特殊文字)をエスケープしたり、そのような値があるときにはプログラムを停止させたりすること。

サニタイジングされるべき文字は利用されるOSやシステム、処理系により異なる。

サニタイジングされるべき文字の例と、意味、どのようにエスケープするかを示す。

なお、ここで挙げる例は一例であり、下記の文字だけを処理すればいいというわけではない。

HTML

  • < ‐ タグ開始記号 ‐ &lt;
  • > ‐ タグ終了記号 ‐ &gt;
  • & ‐ 文字参照開始記号 ‐ &amp;
  • " ‐ タグ内の属性の値を囲むのに利用 ‐ &quot;
  • ' ‐ タグ内の属性の値を囲むのに利用 ‐ &#39;

SQL

  • ' ‐ 値を囲むのに利用 ‐ ''
  • % ‐ LIKE構文で利用 ‐ ESACPE構文を利用
  • _ ‐ LIKE構文で利用 ‐ ESACPE構文を利用

OSコマンド

  • ; ‐ コマンドの連結に利用(UNIX) ‐ 排除
  • . ‐ 自/親ディレクトリを表わす ‐ 排除
  • / ‐ ディレクトリ区切り記号(UNIX) ‐ 排除
  • \ ‐ ディレクトリ区切り記号(Windows) ‐ 排除
  • <>+ ‐ リダイレクト記号 ‐ 排除
  • | ‐ パイプ記号 ‐ 排除
  • NUL文字 ‐ 多くの場合、NUL文字でコマンド文字列の構文解釈が中断される ‐ 排除

実施場所

Webプログラミングにおいては、HTMLに埋め込まれたJavaScript等のスクリプト言語でサニタイジングしてもセキュリティ的に意味がない。クラッカーや攻撃プログラムは、攻撃用コードをWebブラウザーを介さず、直接サーバーに送る。

スクリプトではユーザーへの便宜のための入力値チェックに留め、必ずCGIプログラムの内部でサニタイジングを行なうようにする。

タイミングの重要性

サニタイジングは、実行する直前、出力する直前に行なうのが基本である。

ただし、データの流れがはっきりと分かっている場合や、規格がはっきりと定まっているデータは、外部から取り込んだ直後にサニタイジングを行なっても差し支えはないといえる。

いずれにせよ、プログラムにおけるデータの流れや利用形態をはっきり認識しないと、プログラムは混乱に陥るので注意が必要である。

実装の考え方

サニタイジングを行なうにあたって、通してはいけない文字を一つ一つ指定してサニタイジングを行なうと、プログラミングが膨大になったり、処理すべき文字を処理し忘れるという問題を生み出す可能性がある。

プログラミングを楽にし、セキュリティを向上させるには、通してもよい文字を指定し、それ以外はすべてサニタイジングするという処理にしなければならない。

支援機能

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

ただし、サニタイジングの内容が十分であるかどうかについては検出できない。過度の信頼は禁物である。

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club