FUNDAMENTAL INFORMATION TECHNOLOGY ENGINEER
基本情報技術者の問題解説:B社の会員制サイトでは、ログイン処理で利用者が入力したIDと…
問題
B社の会員制サイトでは、ログイン処理で利用者が入力したIDとパスワードを、プログラムがそのまま連結して作ったSQL文で認証している。診断の結果、IDの入力欄に特定の文字列を入力するだけで、正しいパスワードを知らなくても管理者としてログインできてしまうことが分かった。担当者は緊急に修正方針を決めることになった。
修正方針として、最も適切なものはどれか。
- ア ログイン失敗時のエラーメッセージを、より丁寧な日本語に書き換える。
- イ 認証用のSQL文を、プレースホルダを用いたパラメタ化クエリに書き換える。(正解)
- ウ ログインボタンの色を目立たない色に変更する。
- エ IDの入力欄を画面の下部に移動する。
- オ パスワードの最大文字数を増やす。
正解と解説
正解:認証用のSQL文を、プレースホルダを用いたパラメタ化クエリに書き換える。
状況の整理:パスワードを知らなくても管理者になれるのは、入力したIDがSQL文の条件式として解釈され、認証条件を常に真にできてしまうからです。典型的なSQLインジェクションによる認証回避です。
なぜイか:パラメタ化クエリにすれば入力値はデータとして扱われ、SQLの条件式を書き換えられなくなります。認証回避の根本原因を取り除けます。
誤答の理由:ア(エラーメッセージ)・ウ(ボタンの色)・エ(入力欄の位置)は見た目や文言の話で、SQLの解釈には一切影響しません。オ(パスワード最大長)はパスワードを使わずに突破される本問では無意味です。
読み解きのコツ:「パスワードを知らなくてもログインできる」はインジェクションによる認証回避のサインです。入力とSQLの分離を選びましょう。
他の選択肢はなぜ違う?
- アエラーメッセージの文面は認証回避を防げない。
- ウボタンの色はSQLインジェクションと無関係。
- エ入力欄の位置も無関係。
- オパスワードの最大文字数を増やしても、パスワード不要でログインできる穴は残る。
この問題について
公開問題・サンプル問題のセキュリティ事例形式(A社シナリオ+もっともらしい誤答)を参考にした独自問題です。本文・選択肢・解説は新規作成しています。
公式試験問題、公開問題、市販教材、外部問題サイトの問題文を転載・改題したものではありません。