PR

 入力値の型と代入される変数の型との対応もチェックする。入力値が適切な範囲内(数値の大きさ,文字列の長さなど)に収まっているかを確認し,想定外の文字列が変数に入力されないようにする。Webアプリケーションの開発言語によっては変数の型を定義時に指定できないケースがある。それでも,言語に実装されている判定関数を使って,入力された値が想定された型であることを必ず確認するべきである。

 入力された文字の無効化には,サニタイジングする,バインド・メカニズムを使うといった方法が挙げられる。

 サニタイジングは,システムの仕様上影響を及ぼす危険性のある文字列を削除あるいは無効化する作業。表3で示した特殊文字やHTMLやスクリプトのタグ文字列,SQL構文に用いられる文字列や関数を,削除したり無害な文字列へ置換したりする。意図しないSQL文が生成されることを防げる。

図5●サニタイジングの例
図5●サニタイジングの例

 もう一つのバインド・メカニズムを使う方法では,入力値をバインド変数と呼ぶ変数に渡す。バインド変数はSQL文に埋め込む変数で,すべての入力値を単なる文字列として扱い,あらかじめ用意したSQL文に入力する。入力に合わせてSQL文を生成しないため,不正なSQL文の生成を防ぐことができる。特殊文字も単なる文字として解釈される。

図6●バインド・メカニズム概要
図6●バインド・メカニズム概要

 入力に関する処理はWebアプリケーションの記述言語や,データベースの種類,データ構造によって異なる。環境をよく把握したうえで,慎重に実装する必要がある。

■参考情報
入力値のチェックについて-IPA
http://www.ipa.go.jp/security/
awareness/vendor/programming/a02_01_main.html

SQL Injection攻撃の脅威と対策について-警視庁
http://www.cyberpolice.go.jp/
server/rd_env/pdf/20060330_SQLInjection.pdf

SQL インジェクション攻撃とその対策-Microsoft
http://www.microsoft.com/
japan/technet/security/guidance/sqlinjection.mspx



菅野 祐貴
日本IBM
ISS事業部 マネージドセキュリティサービス部
セキュリティオペレーションセンター
セキュリティエンジニア

 「今週のSecurity Check」は,セキュリティに関する技術コラムです。セキュリティ・ベンダーである「日本アイ・ビーエム ISS事業部」(IBM ISS:旧インターネット セキュリティ システムズ)のスタッフの方々を執筆陣に迎え,同社のセキュリティ・オペレーション・センター(SOC)で観測した攻撃の傾向や,セキュリティ・コンサルタントが現場で得たエッセンスなどを織り交ぜながら,セキュリティに関する技術や最新動向などを分かりやすく解説していただきます。
(編集部より)
■IBM ISSが提供するネットワーク・セキュリティの最新情報はこちら