基本情報 平成27年度 春期 問42:テクノロジ系に関する問題
SQLインジェクション攻撃を防ぐ方法はどれか。
- a入力中の文字がデータベースへの問合せや操作において, 特別な意味をもつつ文 字として解釈されないようにする。正答
- b入力に HTML タグが含まれていたら, HTML タグと して解釈されない他の文字 列に置き換える。
- c入力に上位ディレクトリを指定する文字列 (../) が含まれているときは受け付 けない。
- d入力の全体の長さが制限を超えているときは受け付けない。
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは a「特別な意味の文字を、ただの文字として扱う」です。
SQLインジェクションは「攻撃者が入力欄にSQLの命令を書き込んで、データベースを乗っ取る」攻撃。
たとえば「`' OR 1=1 --`」と入力すると、データベースが命令と勘違いして全データを返してしまう…。
対策は、入力中の `'` や `--` を“ただの文字”として扱うように加工することです(エスケープ/プリペアドステートメント)。
👉 覚え方:「危ない文字をムリヤリ無害化」。
ほかの選択肢:b HTMLタグ置換=XSS対策/c 「../」を弾く=ディレクトリトラバーサル対策/d 長さ制限=バッファオーバーフロー対策。攻撃と対策がそれぞれ違います。
なぜこれが正解か
正解は a。SQLインジェクションは入力値中の特殊文字(`'`、`;`、`--` 等)がSQL構文の一部として解釈されることで発生する。対策は (1) プレースホルダ(プリペアドステートメント)の使用:データと命令を分離、(2) エスケープ処理:特殊文字を文字列扱いに変換、(3) 入力値検証:想定外データの拒否、(4) 最小権限のDB接続ユーザ。設問aは(1)(2)の根本対策に該当。
各選択肢の解説
- b 誤り:HTMLタグの無害化はXSS(クロスサイトスクリプティング)対策。
- c 誤り:`../` の遮断はディレクトリトラバーサル攻撃対策。
- d 誤り:入力長制限はバッファオーバーフロー攻撃対策の補助。SQLインジェクションには無効(短い攻撃文字列も可能)。
覚え方・ひっかけ注意
「攻撃→対策」のセット暗記:SQLi→エスケープ/プレースホルダ、XSS→HTMLエスケープ/CSP、CSRF→トークン、ディレクトリトラバーサル→入力検証、バッファオーバーフロー→境界チェック。設問の選択肢配置は典型ひっかけパターンなので、対策技術の用途を即答できるよう訓練する。
理論的背景
SQLインジェクション(CWE-89)はOWASP Top 10で常時上位(2021版ではA03: Injection)の脆弱性。攻撃手法は (1) 古典型(`' OR '1'='1`)、(2) UNION型(別テーブルのデータ取得)、(3) ブラインド型(応答の真偽から1bitずつ推測)、(4) 時間ベース型(`SLEEP()` で遅延確認)、(5) 二次注入(保存→後段で実行)等。攻撃ツールはSQLMapが代表。
実務での使われ方
対策の優先順位:
1. プリペアドステートメント/バインド変数(JDBC `PreparedStatement`、PHP PDO `prepare()`、Pythonの `cursor.execute(sql, params)`):根本対策
2. ORM(Object-Relational Mapping)の利用:Hibernate、SQLAlchemy等は内部でバインド変数化
3. 入力値検証(ホワイトリスト方式):想定形式以外を拒否
4. WAF(Web Application Firewall):シグネチャベース/機械学習ベース検知
5. 最小権限のDB接続ユーザ:DROP TABLE等の管理権限を持たせない
6. エラーメッセージの抽象化:DB構造の漏えい防止
試験での位置づけ
情報セキュリティ分野の最頻出脆弱性。基本情報・応用情報・情報処理安全確保支援士で毎期出題。OWASP Top 10、CWE/SANS Top 25、CVSS(共通脆弱性評価システム)と併せて理解。最近はGraphQL Injection、NoSQL Injection(MongoDB等)も出題される。
選択肢の発展補足
- XSS(b):DOM-based/Stored/Reflectedの3型。CSP(Content Security Policy)でinline script制限が現代的対策。
- ディレクトリトラバーサル(c):パストラバーサルとも。`canonicalize` &ベースディレクトリ比較が定石。
- バッファオーバーフロー(d):C/C++特有の問題。ASLR・DEP・スタックカナリア・SafeSEHが緩和策。Rust・Goは言語レベルで予防。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成27年度 春期 問42/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。