平成27年度 秋期 午前 問42
セキュリティ
SQLインジェクションの問題
SQL インジェクション攻撃を防ぐ方法はどれか。
- ア入力中の文字がデータベースへの問合せや操作において,特別な意味をもつ文字として解釈されないようにする。
- イ入力に HTML タグが含まれていたら,HTML タグとして解釈されない他の文字列に置き換える。
- ウ入力に上位ディレクトリを指定する文字列(../)が含まれているときは受け付けない。
- エ入力の全体の長さが制限を超えているときは受け付けない。
答えと解説を見る
✓ これが正解ア入力中の文字がデータベースへの問合せや操作において,特別な意味をもつ文字として解釈されないようにする。
解説
問合せ文として解釈される文字を無害な形に直します。
SQL インジェクションは、利用者から受け取った文字がデータベースへの問合せの中でそのまま組み立てられ、指令の意味をもつ文字として解釈されてしまうところに原因があります。したがって防ぐ側の考え方は、受け取った文字が指令の一部として振る舞えない形に直したうえで組み立てることです。見分けるときの軸は二つです。一つ目は、対策の対象が問合せ文の組み立て段そのものに向いているか、それとも別の入口の弱さを塞ぐものか。二つ目は、対処が文字の意味を無害な扱いに変える手当てになっているか、それとも受け付けの拒絶で済ませているかです。攻撃の入口はいくつもあり、それぞれ別の対策が用意されています。名前が似ていても対象の入口が違えば効きません。設問は、指令の一部として解釈される文字を無害化する手当てを求めています。
ほかの選択肢はなぜ違うのか
- イ入力に HTML タグが含まれていたら,…:画面表示で書式付きの指定として動く文字の無害化を述べています。閲覧側の弱さに対する備えで、問合せ文の組み立てとは別の入口の話です。
- ウ入力に上位ディレクトリを指定する文字列(…:上位階層へさかのぼる印を含む文字列を拒む手当てです。ファイルの並びをたどる要求への備えであり、問合せの解釈を変えるものではありません。
- エ入力の全体の長さが制限を超えているときは…:受け取った文字全体の長さに上限を設ける手当てです。桁あふれ系の弱さを狭める備えで、指令の意味として解釈される問題そのものを解きません。
この問題の用語
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
出典:平成27年度 秋期 基本情報技術者試験 午前 問42
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)