平成22年度 秋期 情報セキュリティスペシャリスト試験 午前Ⅱ 問8
攻撃手法
SQLインジェクションの問題
SQL インジェクション攻撃を防ぐ方法はどれか。
- ア入力から,上位ディレクトリを指定する文字列(../)を取り除く。
- イ入力中の文字がデータベースへの問合せや操作において特別な意味をもつ文字として解釈されないようにする。
- ウ入力に HTML タグが含まれていたら,解釈,実行できないほかの文字列に置き換える。
- エ入力の全体の長さが制限を超えていたときは受け付けない。
答えと解説を見る
✓ これが正解イ入力中の文字がデータベースへの問合せや操作において特別な意味をもつ文字として解釈されないようにする。
解説
入力の文字が SQL の特別な意味に解釈されないようにします。
SQL インジェクションは、入力欄に引用符などの記号を混ぜ、アプリケーションが組み立てる SQL 文の意味を書き換える攻撃です。データベースは、書き換えられた SQL 文をそのまま実行してしまいます。これを防ぐには、入力の中の文字が、データベースへの問合せや操作で特別な意味をもたないようにします。記号を別の表現に置き換えるエスケープ処理や、SQL 文の形を先に決めて値だけを後から当てはめる仕組みが使われます。4つの選択肢は、どれもいずれかの攻撃への対策なので、攻撃と対策の組合せで見分けます。
ほかの選択肢はなぜ違うのか
- ア入力から,上位ディレクトリを指定する文字…:上位のディレクトリを指す文字列を取り除くのは、ファイルのパスをたどって公開していないファイルを読み出す攻撃への対策です。SQL 文を書き換える記号はこれと別の文字なので、この処理では防げません。
- ウ入力に HTML タグが含まれていたら,…:HTML タグを別の文字列に置き換えるのは、利用者のブラウザで不正なスクリプトを動かされる攻撃への対策です。データベースへの問合せで意味をもつ記号は HTML タグとは別物なので、SQL 文の書き換えは残ります。
- エ入力の全体の長さが制限を超えていたときは…:入力の長さを制限するのは、確保した領域を超えるデータを書き込ませる攻撃への対策です。SQL 文を書き換えるのに長い文字列は必要なく、短い入力でも攻撃は成り立つので、長さの制限では防げません。
この問題の用語
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
出典:平成22年度 秋期 情報セキュリティスペシャリスト試験 午前Ⅱ 問8
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)