FUNDAMENTAL INFORMATION TECHNOLOGY ENGINEER
基本情報技術者の問題解説
問題
A社の管理画面では,担当者IDと期間を入力して売上明細を検索する。担当者IDだけは数値チェックしているが,期間の条件は入力文字列を連結してSQLのWHERE句に埋め込んでいる。診断では,期間欄に論理式を含む文字列を入れると,他担当者の明細まで抽出できることが分かった。暫定的にWAFを導入したが,開発チームは根本対策を検討している。
根本対策として,最も適切なものはどれか。
- ア WAFの検知ルールを追加し,アプリケーション側のSQL生成方法はそのままにする。
- イ 期間欄の入力文字数を短くし,記号が多い場合だけエラーにする。
- ウ 期間条件もプレースホルダを使ったパラメタ化クエリにし,対象データの権限確認もサーバ側で行う。
- エ SQL文を複数行に分けて書き,攻撃者に推測されにくくする。
- オ 検索結果の列数を減らす。
出典:オリジナル問題|参考範囲:試験要綱Ver.5.5 / FEシラバスVer.9.2 科目B範囲
正解と解説
正解:期間条件もプレースホルダを使ったパラメタ化クエリにし,対象データの権限確認もサーバ側で行う。
正解:ウ
入力がSQL構文として解釈されることが原因なので,パラメタ化クエリで入力をデータとして扱う必要がある。他担当者の明細が見えるため,対象データへの権限確認も必要である。
WAFや文字数制限は補助策であり,SQL生成方法を変えなければ根本対策にならない。
Hardでの見抜き方:一部の入力だけ検査していても,別の入力がSQL文字列へ連結されていれば脆弱性は残る。WAFや文字数制限は補助策であり,SQL構造と入力値を分離することが本質である。
この問題について
公開問題・サンプル問題のセキュリティ事例形式(A社シナリオ+もっともらしい誤答)を参考にした独自問題です。本文・選択肢・解説は新規作成しています。
公式試験問題、公開問題、市販教材、外部問題サイトの問題文を転載・改題したものではありません。