※本情報は解説作成時点のもので、閲覧時点では法改正等により情報が変更になっている場合がございます。あらかじめご理解いただければ幸いです。
正解は「D.プレースホルダを使って命令文を組み立てる。」です。
SQLインジェクション対策としては、バインド変数(プレースホルダ)を用いてSQL文を安全に組み立てる方法が有効です。
この記事では、基本情報技術者試験(FE)試験(令和6年度)で出題された第10問「SQLインジェクション対策」について、試験対策の観点からわかりやすく解説します。
Contents
SQLインジェクションとは
SQLインジェクション=入力値にSQL文を混入させて不正操作を行う攻撃
Webアプリケーションで、利用者が入力した値をそのままSQL文に連結すると、攻撃者が意図しないSQL文を実行させることが可能になります。
有効な対策
プレースホルダ(バインド変数)を利用すると、SQL文の構造とデータを分離できます。
これにより、入力値が単なるデータとして扱われ、SQL文として解釈されることを防げます。
例:SELECT * FROM user WHERE id = ?
各選択肢の検討
- A:URLの形式制限 → XSSや不正リンク対策に近い
- B:ファイル名の直接指定回避 → ディレクトリトラバーサル対策
- C:外部スタイルシート制限 → 情報漏えい対策などに関連
- D:プレースホルダ利用 → SQLインジェクション対策として有効
したがって、正解はDです。
問われているポイント
この問題では、代表的なWebアプリケーション攻撃とその対策の対応関係を理解しているかが問われています。
攻撃手法と対策をセットで覚えることが重要です。
気を付けてほしい点(勘違いしやすいポイント)
- 入力値のエスケープだけに頼らない
- SQL文の文字列連結は避ける
補足
プレースホルダ(バインド変数)の使用は、試験でも実務でも基本的な対策です。
基本情報技術者試験(FE)試験での出題パターン
基本情報技術者試験(FE)試験では、SQLインジェクションやXSSなどの代表的攻撃とその対策が頻出です。
用語と具体的対策を正確に整理しておきましょう。
この知識が使われている問題
まとめ
- SQLインジェクションは入力値を悪用する攻撃
- プレースホルダの利用が有効な対策