平成30年度 春期 午前 問41
セキュリティ
SQLインジェクションの問題
SQL インジェクション攻撃による被害を防ぐ方法はどれか。
- ア入力された文字が,データベースへの問合せや操作において,特別な意味をもつ文字として解釈されないようにする。
- イ入力に HTML タグが含まれていたら,HTML タグとして解釈されない他の文字列に置き換える。
- ウ入力に上位ディレクトリを指定する文字列(`../`)が含まれているときは受け付けない。
- エ入力の全体の長さが制限を超えているときは受け付けない。
答えと解説を見る
✓ これが正解ア入力された文字が,データベースへの問合せや操作において,特別な意味をもつ文字として解釈されないようにする。
解説
問合せで特別な意味をもつ文字として解釈させません。
データベースを扱う仕組みでは、利用者が入力した文字列が、そのまま問合せ文の一部として組み立てられることがあります。このとき、問合せ文の中で区切りや命令の切れ目として働く文字が入力に混じっていると、開発者が意図しなかった操作まで実行されてしまいます。これが SQL インジェクションと呼ばれる攻撃の成り立ちでした。攻撃がこの一点を突いてくる以上、防ぐ側も同じ一点に手を当てます。つまり、入力された文字が、データベースへの問合せや操作において特別な意味をもつ文字として解釈されないようにしておくことです。だから、その手当てを述べた肢が当たります。判定の軸は、その手当てが効く先がデータベースへの問合せ文なのか、それとも別の場所なのかです。残る三つは、いずれも入力そのものへの手当てではありますが、効き目が及ぶ先が問合せ文ではありませんでした。
ほかの選択肢はなぜ違うのか
- イ入力に HTML タグが含まれていたら,…:入力に HTML タグが含まれていたら、HTML タグとして解釈されない他の文字列に置き換えると述べています。これはブラウザ側でタグとして働かないようにする手当てで、データベースへ渡す問合せ文の組み立て方は変わりません。
- ウ入力に上位ディレクトリを指定する文字列(…:入力に上位ディレクトリを指定する文字列が含まれているときは受け付けないと述べています。ファイルの置き場をたどられないようにするための備えで、守る対象がファイルの構造の側にあります。問合せ文の中で文字がどう解釈されるかには効きません。
- エ入力の全体の長さが制限を超えているときは…:入力の全体の長さが制限を超えているときは受け付けないと述べています。長すぎる入力そのものを断る備えで、想定を超える大きさに対する手当てです。長さが制限内であれば、特別な意味をもつ文字はそのまま通り抜けました。
この問題の用語
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
出典:平成30年度 春期 基本情報技術者試験 午前 問41
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)