平成25年度 春期 午前 問40
セキュリティ
SQLインジェクションの問題
SQL インジェクション攻撃を防ぐ方法はどれか。
- ア入力中の文字がデータベースへの問合せや操作において,特別な意味をもつ文字として解釈されないようにする。
- イ入力に HTML タグが含まれていたら,HTML タグとして解釈されない他の文字列に置き換える。
- ウ入力に,上位ディレクトリを指定する文字列(../)を含むときは受け付けない。
- エ入力の全体の長さが制限を超えているときは受け付けない。
答えと解説を見る
✓ これが正解ア入力中の文字がデータベースへの問合せや操作において,特別な意味をもつ文字として解釈されないようにする。
解説
問合せの中で特別な意味を持たせないのが対策です。
SQL インジェクションは、利用者が入力した文字列が、データベースへの問合せ文の一部として解釈されてしまうことで起きます。入力の中に、文の区切りや命令として働く文字が混じっていると、組み立てた側が意図していない操作まで実行されてしまいます。したがって対策は、入力された文字がデータベースへ渡るときに、命令としてではなく、ただのデータとして扱われるようにすることです。判定の軸は一つで、その入力が最後にどこへ渡って解釈されるかです。四つの記述はどれも入力を検査したり加工したりする対策ですが、渡り先がそれぞれ違います。良い対策かどうかでは選べないので、渡り先が問合せ文になっているものを探します。
ほかの選択肢はなぜ違うのか
- イ入力に HTML タグが含まれていたら,…:画面を組み立てる記述として解釈されないようにする対策です。利用者の閲覧ソフトの上で意図しない動きをさせる攻撃に効くもので、渡り先がデータベースではありません。
- ウ入力に,上位ディレクトリを指定する文字列…:ファイルの置き場所をさかのぼる指定を拒む対策です。想定していない場所のファイルを読み出させる攻撃に効くもので、問合せ文の組立てには関わりません。
- エ入力の全体の長さが制限を超えているときは…:決められた大きさを超える入力を拒む対策です。用意した領域からあふれさせて動きを乗っ取る攻撃に効くもので、命令として解釈されることを防ぐ働きはありません。
この問題の用語
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
出典:平成25年度 春期 基本情報技術者試験 午前 問40
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)