FE SUBJECT B
基本情報技術者 科目Bの問題解説
問題
A社のECサイトには商品検索機能があり,利用者が入力したキーワードを,プログラムが文字列連結によってそのままSQL文に埋め込んで実行している。脆弱性診断で,検索欄に特定の記号と条件式を入力すると,本来表示されないはずの他の会員の注文情報まで一覧表示できてしまうことが指摘された。開発を担当するBさんは,この問題への対策を検討している。
対策として,最も適切なものはどれか。
- ア 検索キーワードに使える文字数の上限を短くする。
- イ SQL文をできるだけ長く複雑にして,攻撃者に推測されにくくする。
- ウ プレースホルダを用いたパラメタ化クエリに変更し,入力値をデータとして扱う。
- エ 検索結果の1ページあたりの表示件数を減らす。
- オ 検索欄の入力をすべて大文字に変換してから処理する。
正解と解説
正解:プレースホルダを用いたパラメタ化クエリに変更し,入力値をデータとして扱う。
正解:ウ
状況の整理:原因は「利用者の入力を文字列連結でSQL文に埋め込んでいる」こと。入力した条件式がSQLの一部として解釈されてしまうため,他人の情報を引き出せる。これがSQLインジェクション。
なぜウか:パラメタ化クエリ(プレースホルダ)では,入力値を「SQLの命令」ではなく「ただのデータ」として扱う。これにより,入力に条件式や記号が含まれてもSQLの構造を変えられず,根本的に防げる。
誤答の理由:ア(文字数制限)は長さを縮めるだけで,短い攻撃文字列は通る。イ(SQLを複雑化)は内部構造の話で,入力の扱いを変えないため無意味。エ(表示件数)は見せ方の問題で原因と無関係。オ(大文字変換)はSQL構文に影響せず防御にならない。
読み解きのコツ:「入力をそのままSQLに埋め込む」と書かれていたら,入力をデータとして分離する対策(パラメタ化)が定石。
この問題について
公開問題・サンプル問題のセキュリティ事例形式(A社シナリオ+もっともらしい誤答)を参考にした独自問題です。本文・選択肢・解説は新規作成しています。
公式試験問題、公開問題、市販教材、外部問題サイトの問題文を転載・改題したものではありません。